-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.