vfork - Online Manual Page Of Unix/Linux

  Command: man perldoc info search(apropos)

WebSearch:
Our Recommended Sites:
  • Printer Ink
Full-Featured Editor
 

VFORK(P)                                                                                 VFORK(P)



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 execu-
              tion 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  ineffi-
       cient  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>

COPYRIGHT
       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 orig-
       inal Standard can be obtained online at http://www.opengroup.org/unix/online.html .



POSIX                                          2003                                      VFORK(P)