unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

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

VFORK(2)                      System Calls Manual                     VFORK(2)



NAME
       vfork - spawn new process in a virtual memory efficient way

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

       int vfork()

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

RETURN VALUES
       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.

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

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