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