Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-4.1.3)
Apropos / Subsearch:
optional field

VFORK(2)                      System Calls Manual                     VFORK(2)

       vfork - spawn new process in a virtual memory efficient way

       #include <&lt;vfork.h>&gt;

       int vfork()

       vfork()  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(2V), would
       have been to create a new system context for  an  execve(2V).   vfork()
       differs  from  fork() in that the child borrows the parent's memory and
       thread of control until a call to execve(2V), or an exit (either  by  a
       call to exit(2V) or abnormally.)  The parent process is suspended while
       the child is using its resources.

       vfork() returns 0 in the child's context and  (later)  the  process  ID
       (PID) of the child in the parent's context.

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

       On Sun-4 machines, the parent inherits the values of local and incoming
       argument  registers from the child.  Since this violates the usual data
       flow properties of procedure calls, the file <&lt;vfork.h>&gt; must be included
       in programs that are compiled using global optimization.

       On  success,  vfork()  returns  0  to the child process and returns the
       process ID of the child process to the  parent  process.   On  failure,
       vfork()  returns  -1  to the parent process, sets errno to indicate the
       error, and no child process is created.

       execve(2V), exit(2V), fork(2V), ioctl(2), sigvec(2), wait(2V)

       This system call will be eliminated in a future release.  System imple-
       mentation  changes  are  making  the  efficiency  gain  of vfork() over
       fork(2V) smaller.  The memory  sharing  semantics  of  vfork()  can  be
       obtained through other mechanisms.

       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  ioctls are allowed and input attempts result in an
       EOF indication.

                                21 January 1990                       VFORK(2)