table of contents
other sections
VFORK(2) | System Calls Manual | VFORK(2) |
NAME¶
vfork
—
create a new process without copying the address
space
LIBRARY¶
Standard C Library (libc, -lc)SYNOPSIS¶
#include
<unistd.h>
pid_t
vfork
(void);
DESCRIPTION¶
Thevfork
() 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.)
RETURN VALUES¶
Same as for fork(2).SEE ALSO¶
execve(2), _exit(2), fork(2), rfork(2), sigaction(2), wait(2), exit(3)HISTORY¶
Thevfork
() system call appeared in
2.9BSD.
BUGS¶
To avoid a possible deadlock situation, processes that are children in the middle of avfork
() 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.November 13, 2009 | Debian |