vfork(2) UNIX System V vfork(2)
NAME
vfork - spawn new process in a virtual memory efficient way
SYNOPSIS
#include <unistd.h>
pidt vfork (void);
DESCRIPTION
vfork can be used to create new processes without fully copying the
address space of the old process. It is useful when the purpose of fork
would have been to create a new system context for an execve. vfork
differs from fork in that the child borrows the parent's memory and
thread of control until a call to execve or an exit (either by a call to
exit or abnormally.) The parent process is suspended while the child is
using its resources.
vfork returns 0 in the child's context and (later) the process ID (PID of
the child in the parent's context.
vfork can normally be used just like fork. It does not work, however, to
return while running in the child's context from the procedure which
called vfork since the eventual return from vfork would then return to a
no longer existent stack frame. Be careful, also, to call exit rather
than exit if you cannot execve, since exit will flush and close standard
I/O channels, and thereby mess up the parent processes standard I/O data
structures. Even with fork it is wrong to call exit since buffered data
would then be flushed twice.
DIAGNOSTICS
Upon successful completion, vfork returns a value of 0 to the child
process and returns the process ID of the child process to the parent
process. Otherwise, a value of -1 is returned to the parent process, no
child process is created, and the global variable errno is set to
indicate the error.
vfork will fail and no child process will be created if one or more of
the following are true:
EAGAIN The system-imposed limit on the total number of processes
under execution would be exceeded. This limit is
determined when the system is generated.
EAGAIN The system-imposed limit on the total number of processes
under execution by a single user would be exceeded. This
limit is determined when the system is generated.
ENOMEM There is insufficient swap space for the new process.
SEE ALSO
exec(2), exit(2), fork(2), ioctl(2), wait(2)
10/89 Page 1
vfork(2) UNIX System V vfork(2)
NOTES
This system call will be eliminated in a future release. System
implementation changes are making the efficiency gain of vfork over fork
smaller. The memory sharing semantics of vfork can be obtained through
other mechanisms.
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 ioctls are allowed and input attempts result in an EOF
indication.
On some systems, the implementation of vfork causes the parent to inherit
register values from the child. This can create problems for certain
optimizing compilers if <unistd.h> is not included in the source calling
vfork.
Page 2 10/89