vfork(2)vfork(2)NAMEvfork - spawn new process; share virtual memory
is a higher performance version of that is provided on some systems
where a performance advantage can be attained.
If the calling process is multi-threaded, the newly created child
process will only contain one thread. This one thread will be a copy of
the thread calling
differs from only in that the child process can share code and data
with the calling process (parent process). This speeds cloning activ‐
ity significantly at a risk to the integrity of the parent process if
The use of for any purpose except as a prelude to an immediate or is
not supported. Any program that relies upon the differences between
and is not portable across HP-UX systems.
All HP-UX implementations must provide the entry but it is permissible
for them to treat it identically to On some implementations the two are
not distinguished because the implementation is as efficient as possi‐
ble. Other versions may do the same to avoid the overhead of support‐
ing two similar calls.
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 do an
(see exec(2)), the data space copied from the parent to the child by is
not used. This is particularly inefficient in a paged environment,
making particularly useful. Depending upon the size of the parent's
data space, can give a significant performance improvement over
differs from in that the child borrows the parent's memory and thread
of control until a call to or an exit (either by a call to or abnor‐
mally (see exec(2) and exit(2)). The parent process is suspended while
the child is using its resources.
returns 0 in the child's context and (later) the pid of the child in
the parent's context.
can normally be used just like It does not work, however, to return
while running in the child's context from the procedure which called
since the eventual return from would then return to a no longer exis‐
tent stack frame.
The window begins at the call and ends when the child completes its
Upon successful completion, 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, no child process is
created, and is set to indicate the error.
fails and no child process is created if any of the following condi‐
tions are encountered:
The system-wide limit on the total number of processes under
would be exceeded.
The system-imposed limit on the total number of processes under
by a single user would be exceeded.
There is insufficient swap space and/or physical memory
available to create the new process.
Process times for the parent and child processes within the window may
Parent and child processes share the same stack space within the
window. If the size of the stack has been changed within this
window by the child process (return from or call to a function,
for example), it is likely that the parent and child processes
will be killed with signal or
In the window, a call to (see signal(2) that installs a catching
function can affect handling of the signal by the parent. The
parent is not affected if the handling is being set to or or if
is used (see sigaction(2)).
was developed by the University of California, Berkeley.
SEE ALSOexec(2), exit(2), fork(2), sigaction(2), wait(2).