Provided by: freebsd-manpages_9.2+1-1_all bug

NAME

       vfork — create a new process without copying the address space

LIBRARY

       Standard C Library (libc, -lc)

SYNOPSIS

       #include <unistd.h>

       pid_t
       vfork(void);

DESCRIPTION

       The  vfork()  system  call can be used to create new processes without fully copying the address space of
       the old process, which is horrendously inefficient in a paged environment.  It is useful when the purpose
       of fork(2) would have been to create a new system context for an  execve(2).   The  vfork()  system  call
       differs  from fork(2) in that the child borrows the parent's memory and thread of control until a call to
       execve(2) or an exit (either by a call to _exit(2) or abnormally).  The parent process is suspended while
       the child is using its resources.

       The vfork() system call returns 0 in the child's context and (later) the pid of the child in the parent's
       context.

       The vfork() system call can normally be used just like fork(2).  It does not  work,  however,  to  return
       while  running  in  the  child's context from the procedure that called vfork() since the eventual return
       from vfork() would then return to a no longer existent stack frame.  Be careful, also, to  call  _exit(2)
       rather  than  exit(3)  if you cannot execve(2), since exit(3) will flush and close standard I/O channels,
       and thereby mess up the parent processes standard I/O data structures.  (Even with fork(2) it is wrong to
       call exit(3) since buffered data would then be flushed twice.)

RETURN VALUES

       Same as for fork(2).

SEE ALSO

       execve(2), _exit(2), fork(2), rfork(2), sigaction(2), wait(2), exit(3)

HISTORY

       The vfork() system call appeared in 2.9BSD.

BUGS

       To avoid a possible deadlock situation, processes that are children in the middle of a vfork() are  never
       sent  SIGTTOU  or SIGTTIN signals; rather, output or ioctl(2) calls are allowed and input attempts result
       in an end-of-file indication.

Debian                                          November 13, 2009                                       VFORK(2)