trusty (3) vfork.3posix.gz

Provided by: manpages-posix-dev_2.16-1_all bug

NAME

       vfork - create a new process; share virtual memory

SYNOPSIS

       #include <unistd.h>

       pid_t vfork(void);

DESCRIPTION

       The  vfork() function shall be equivalent to fork(), except that the behavior is undefined if the process
       created by vfork() either modifies any data other than a variable of type pid_t used to store the  return
       value from vfork(), or returns from the function in which vfork() was called, or calls any other function
       before successfully calling _exit() or one of the exec family of functions.

RETURN VALUE

       Upon successful completion, vfork() shall return 0 to the child process and return the process ID of  the
       child  process  to  the  parent  process. Otherwise, -1 shall be returned to the parent, no child process
       shall be created, and errno shall be set to indicate the error.

ERRORS

       The vfork() function shall fail if:

       EAGAIN The system-wide limit on the total number of processes under execution would be exceeded,  or  the
              system-imposed  limit  on  the total number of processes under execution by a single user would be
              exceeded.

       ENOMEM There is insufficient swap space for the new process.

       The following sections are informative.

EXAMPLES

       None.

APPLICATION USAGE

       Conforming applications are recommended not to depend on vfork(), but to use fork() instead. The  vfork()
       function may be withdrawn in a future version.

       On some implementations, vfork() is equivalent to fork().

       The  vfork() function differs from fork() only in that the child process can share code and data with the
       calling process (parent process). This speeds cloning activity significantly at a risk to  the  integrity
       of the parent process if vfork() is misused.

       The  use  of vfork() for any purpose except as a prelude to an immediate call to a function from the exec
       family, or to _exit(), is not advised.

       The vfork() function can be used to create new processes without fully copying the address space  of  the
       old  process.  If a forked process is simply going to call exec, the data space copied from the parent to
       the child by fork() is not used. This is particularly inefficient in a paged environment, making  vfork()
       particularly  useful.  Depending upon the size of the parent's data space, vfork() can give a significant
       performance improvement over fork().

       The vfork() function can normally be used just like fork().  It does not work, however, to  return  while
       running  in  the  child's context from the caller of vfork() since the eventual return from vfork() would
       then return to a no longer existent stack frame.  Care should be taken, also, to call _exit() rather than
       exit()  if  exec  cannot be used, since exit() flushes and closes standard I/O channels, thereby damaging
       the parent process' standard I/O data structures. (Even with fork(), it is wrong to  call  exit(),  since
       buffered data would then be flushed twice.)

       If  signal  handlers  are  invoked in the child process after vfork(), they must follow the same rules as
       other code in the child process.

RATIONALE

       None.

FUTURE DIRECTIONS

       This function may be withdrawn in a future version.

SEE ALSO

       exec() , exit() , fork() , wait() , the Base Definitions volume of IEEE Std 1003.1-2001, <unistd.h>

       Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2003 Edition,
       Standard  for  Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base
       Specifications Issue 6, Copyright (C) 2001-2003 by the Institute of Electrical and Electronics Engineers,
       Inc  and  The  Open Group. In the event of any discrepancy between this version and the original IEEE and
       The Open Group Standard, the original IEEE and The Open Group  Standard  is  the  referee  document.  The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .