Originální popis anglicky:
vfork - create a new process; share virtual memory
Návod, kniha: POSIX Programmer's Manual
#include <unistd.h>
pid_t vfork(void);
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.
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.
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.
None.
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.
None.
This function may be withdrawn in a future version.
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
.