VFORK(2) BSD System Calls Manual VFORK(2)NAME
vfork -- create a new process without copying the address space
Standard C Library (libc, -lc)
The vfork() system call 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(2) would have been to create a new system context for an
execve(2). The vfork() system call differs from fork(2) in that the child borrows the parent's memory and thread of control until a call to
execve(2) or an exit (either by a call to _exit(2) or abnormally). The parent process is suspended while the child is using its resources.
The vfork() system call returns 0 in the child's context and (later) the pid of the child in the parent's context.
The vfork() system call can normally be used just like fork(2). It does not work, however, to return while running in the child's context
from the procedure that called vfork() since the eventual return from vfork() would then return to a no longer existent stack frame. Be
careful, also, to call _exit(2) rather than exit(3) if you cannot execve(2), since exit(3) will flush and close standard I/O channels, and
thereby mess up the parent processes standard I/O data structures. (Even with fork(2) it is wrong to call exit(3) since buffered data would
then be flushed twice.)
Same as for fork(2).
SEE ALSO _exit(2), execve(2), fork(2), rfork(2), sigaction(2), wait(2), exit(3)HISTORY
The vfork() system call appeared in 2.9BSD.
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 ioctl(2) calls are allowed and input attempts result in an end-of-file indication.
BSD November 13, 2009 BSD
Check Out this Related Man Page
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 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.
Conforming applications are recommended not to depend on vfork(), but to use fork() instead. The vfork() function may be withdrawn in a
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
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
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, <unistd.h>
Portions of this text are reprinted and reproduced in electronic form from IEEE Std 1003.1, 2003 Edition, Standard for Information Technol-
ogy -- 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 .
IEEE /The Open Group 2003 VFORK(P)