VFORK(2-SVR4) RISC/os Reference Manual VFORK(2-SVR4)
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, which is
horrendously inefficient in a paged environment. It is use-
ful when the purpose of fork(2) 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 pro-
cess 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 con-
text from the procedure which called vfork since the even-
tual 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.
Printed 11/19/92 Page 1
VFORK(2-SVR4) RISC/os Reference Manual VFORK(2-SVR4)
ENOMEM There is insufficient swap space for the new
process.
SEE ALSO
exec(2), exit(2), fork(2), ioctl(2), wait(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 Printed 11/19/92