Try to fix SIGIO problem with Sun machines, h_errno with
[unix-history] / usr / src / lib / libc / sys / fork.2
index 5861a64..2b25ded 100644 (file)
@@ -2,64 +2,68 @@
 .\" All rights reserved.  The Berkeley software License Agreement
 .\" specifies the terms and conditions for redistribution.
 .\"
 .\" All rights reserved.  The Berkeley software License Agreement
 .\" specifies the terms and conditions for redistribution.
 .\"
-.\"    @(#)fork.2      4.1 (Berkeley) %G%
+.\"    @(#)fork.2      6.4 (Berkeley) %G%
 .\"
 .\"
-.TH FORK 2 
+.TH FORK 2 ""
 .UC
 .SH NAME
 .UC
 .SH NAME
-fork \- spawn new process
+fork \- create a new process
 .SH SYNOPSIS
 .SH SYNOPSIS
-.B fork()
+.ft B
+pid = fork()
+.br
+int pid;
+.ft R
 .SH DESCRIPTION
 .I Fork
 .SH DESCRIPTION
 .I Fork
-and
-.IR vfork (2)
-are the only ways new processes are created.
-With
-.I fork ,
-the new process's core image is a copy of
-that of the caller of
-.IR fork .
-The only distinction
-is the fact
-that the value returned in the old (parent) process
-contains the process ID
-of the new (child) process,
-while the value returned in the child is 0.
-Process ID's range from 1 to 30,000.
-This process ID is used by
-.IR wait (2).
-.PP
-Files open before the fork
-are shared, and have a common read-write pointer.
-In particular,
-this is the way that standard input and output
-files are passed and also how
-pipes are set up.
-.PP
-.I Vfork
-is the most efficient way of creating a new process
-when the fork is to be followed shortly by an exec,
-but is not suitable when the fork is not to be followed
-by an exec.
+causes creation of a new process.
+The new process (child process) is an exact copy of the
+calling process except for the following:
+.in +5n
+.sp
+The child process has a unique process ID.
+.sp
+The child process has a different parent process ID (i.e.,
+the process ID of the parent process).
+.sp
+The child process has its own copy of the parent's descriptors.
+These descriptors reference the same underlying objects, so that,
+for instance, file pointers in file objects are shared between
+the child and the parent, so that an
+.IR lseek (2)
+on a descriptor in the child process can affect a subsequent
+.I read
+or
+.I write
+by the parent.
+This descriptor copying is also used by the shell to
+establish standard input and output for newly created processes
+as well as to set up pipes.
+.sp
+The child processes resource utilizations are set to 0;
+see
+.IR setrlimit (2).
+.SH "RETURN VALUE
+Upon successful completion, \fIfork\fP returns a value
+of 0 to the child process and returns the process ID of the child
+process to the parent process.  Otherwise, a value of \-1 is returned
+to the parent process, no child process is created, and the global
+variable \fIerrno\fP is set to indicate the error.
+.SH ERRORS
+.I Fork
+will fail and no child process will be created if one or more of the
+following are true:
+.TP 15
+[EAGAIN]
+The system-imposed limit on the total
+number of processes under execution would be exceeded.
+This limit is configuration-dependent.
+.TP 15
+[EAGAIN]
+The system-imposed limit MAXUPRC (\fI<sys/param.h>) \fRon the total number of
+processes under execution by a single user would be exceeded.
+.TP 15
+[ENOMEM]
+There is insufficient swap space for the new process.
 .SH "SEE ALSO"
 .SH "SEE ALSO"
-wait(2), exec(2), vfork(2)
-.SH DIAGNOSTICS
-Returns \-1 and fails to create a process if:
-there is inadequate swap space,
-the user is not super-user and has too many processes,
-or the system's process table is full.
-Only the super-user can take the last process-table slot.
-.SH "ASSEMBLER (PDP-11)"
-(fork = 2.)
-.br
-.B sys fork
-.br
-(new process return)
-.br
-(old process return, new process ID in r0)
-.PP
-The return locations in the old and new process
-differ by one word.
-The C-bit is set in the old process if a new
-process could not be created.
+execve(2), wait(2)