VFORK(2) AerieBSD 1.0 Refernce Manual VFORK(2)

NAME

vfork — spawn new process and block parent

SYNOPSIS

#include <unistd.h>

pid_t vfork(void);

DESCRIPTION

vfork(); was originally used to create new processes without fully copying the address space of the old process, which is horrendously inefficient in a paged environment. It was useful when the purpose of fork(2) would have been to create a new system context for an execve(2). Since fork(2) is now efficient, even in the above case, the need for vfork(); has diminished. vfork(); differs from fork(2) in that the parent is suspended until the child makes a call to execve(2) or an exit (either by a call to _exit(2) or abnormally). In addition, fork handlers established using pthread_atfork(3) are not called when a multithreaded program calls vfork();.

vfork(); returns 0 in the child's context and (later) the PID of the child in the parent's context.

RETURN VALUES

Same as for fork(2).

SEE ALSO

execve(2), fork(2), sigaction(2), wait(2)

HISTORY

The vfork(); function call appeared in 2.9BSD.

BUGS

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.


AerieBSD 1.0 Reference Manual August 26 2008 VFORK(2)