NAME

     fork - create a new process


SYNOPSIS

     #include <sys/types.h>
     #include <unistd.h>

     pid_t fork(void)


DESCRIPTION

     Fork causes creation of a  new  process.   The  new  process
     (child  process)  is  an  exact  copy of the calling process
     except for the following:

          The child process has a unique process ID.

          The child process has a  different  parent  process  ID
          (i.e., the process ID of the parent process).

          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 lseek(2) on a descriptor  in
          the child process can affect a subsequent read or 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.

          The child starts with no pending signals and  an  inac-
          tive alarm timer.


RETURN VALUE

     Upon successful completion, fork returns a value of 0 to the
     child  process  and returns the process ID of the child pro-
     cess to the parent process.  Otherwise, a  value  of  -1  is
     returned to the parent process, no child process is created,
     and the global variable errno is set to indicate the error.


ERRORS

     Fork will fail and no child process will be created  if  one
     or more of the following are true:

     [EAGAIN]       The system-imposed limit on the total  number
                    of   processes   under   execution  would  be
                    exceeded.   This  limit   is   configuration-
                    dependent.   (The kernel variable NR_PROCS in
                    <minix/config.h> (Minix), or  <minix/const.h>
                    (Minix-vmd).)

     [ENOMEM]       There is insufficient  (virtual)  memory  for
                    the new process.


SEE ALSO

     execve(2), wait(2).