# fork(2)

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