vfor.2 (2011 03)

v
vfork(2) vfork(2)
NAME
vfork - spawn new process; share virtual memory
SYNOPSIS
#include <unistd.h>
pid_t vfork(void);
REMARKS
vfork() is a higher performance version of fork()
that is provided on some systems where a perfor-
mance 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
vfork().
vfork() differs from fork() only in that the child process can share code and data with the calling
process (parent process). This speeds cloning activity significantly at a risk to the integrity of the parent
process if vfork() is misused.
The use of
vfork() for any purpose except as a prelude to an immediate
exec() or _exit() is not
supported. Any program that relies upon the differences between
fork() and vfork() is not port-
able across HP-UX systems.
All HP-UX implementations must provide the entry
vfork(), but it is permissible for them to treat it
identically to
fork. On some implementations the two are not distinguished because the
fork()
implementation is as efcient as possible. Other versions may do the same to avoid the overhead of sup-
porting two similar calls.
DESCRIPTION
vfork() 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 exec() (see exec (2)), the data space copied from the parent
to the child by fork() is not used. This is particularly inefficient in a paged environment, making
vfork particularly useful. Depending upon the size of the parent’s data space,
vfork() can give a
significant performance improvement over
fork().
vfork() differs from fork() in that the child borrows the parent’s memory and thread of control until
a call to exec() or an exit (either by a call to _exit() or abnormally (see exec (2) and exit (2)). The
parent process is suspended while the child is using its resources.
vfork() returns 0 in the child’s context and (later) the 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.
The [
vfork,exec] window begins at the vfork() call and ends when the child completes its
exec()
call.
RETURN VALUE
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, no child
process is created, and errno is set to indicate the error.
ERRORS
vfork() fails and no child process is created if any of the following conditions are encountered:
[EAGAIN] The system-wide limit on the total number of processes under execution would be
exceeded.
[EAGAIN] The system-imposed limit on the total number of processes under execution by a
single user would be exceeded.
[ENOMEM] There is insufficient swap space and/or physical memory available to create the new
process.
DEPENDENCIES
Servers
Process times for the parent and child processes within the [
vfork,exec] window may be inaccurate.
HP-UX 11i Version 3: March 2011 1 Hewlett-Packard Company 1

Summary of content (2 pages)