pid_t
vfork(
void
)
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 childs 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 can't
execve(2),
since
exit(3)
will flush and close standard I/O channels, and thereby mess up the
standard I/O data structures
in the parent process.
(Even with
fork(2)
it is wrong to call
exit(3)
since buffered data would then be flushed twice.)
)
function call appeared in
3.0BSD.
In
4.4BSD,
the semantics were changed to only suspend the parent.
The original semantics were reintroduced in
NetBSD1.4.
)
as other ways of speeding up the fork process may be developed in
the future.
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.