VFORK(P) POSIX Programmer's Manual VFORK(P)
vfork - create a new process; share virtual memory
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
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.
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
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.
This function may be withdrawn in a future version.
exec() , exit() , fork() , wait() , the Base Definitions volume of IEEE Std 1003.1-2001,
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 .
IEEE/The Open Group 2003 VFORK(P)