fork(2)fork(2)NAMEfork() - create a new process
SYNOPSISDESCRIPTION
The system call causes the creation of a new process. The new child
process is created with exactly one thread or lightweight process. The
new child process contains a replica of the calling thread (if the
calling process is multi-threaded) and its entire address space, possi‐
bly including the state of mutexes and other resources.
If the calling process is multi-threaded, the child process may only
execute async-signal safe functions until one of the exec functions is
called. Fork handlers may be installed via in order to maintain appli‐
cation invariants across calls (i.e, release resources such as mutexes
in the child process).
The child process inherits the following attributes from the parent
process:
· Real, effective, and saved user IDs.
· Real, effective, and saved group IDs.
· List of supplementary group IDs (see getgroups(2)).
· Process group ID.
· Environment.
· File descriptors.
· Close-on-exec flags (see exec(2)).
· Signal handling settings address).
· Signal mask (see sigprocmask(2)).
· Profiling on/off status (see profil(2)).
· Command name in the accounting record (see acct(4)).
· Nice value (see nice(2)).
· All attached shared memory segments (see shmop(2)).
· Current working directory.
· Root directory (see chroot(2)).
· File mode creation mask (see umask(2)).
· File size limit (see ulimit(2)).
· Real-time priority (see rtprio(2)).
· Fine-grained privileges (if installed) (see privileges(5)).
· Compartments (if installed and enabled) (see compart‐
ments(5)).
· The trace flag (see the ttrace(2) request).
· Core file settings (see coreadm(2) and coreadm(1M)).
Each of the child's file descriptors shares a common open file descrip‐
tion with the corresponding file descriptor of the parent. This
implies that changes to the file offset, file access mode, and file
status flags of file descriptors in the parent also affect those in the
child, and vice-versa.
The child process differs from the parent process in the following
ways:
The child process has a unique process ID.
The child process ID does not match any active process group ID.
The child process has a different parent process ID (which is
the process ID of the parent process).
The set of signals pending for the child process is initialized
to the empty set.
The flag in the component of the accounting record is set in the
child process.
Process locks, text locks, and data locks are not inherited by
the child (see plock(2)).
All values are cleared (see semop(2)).
The child process's values for and are set to zero (see
times(2)).
The time left until an alarm clock signal is reset to 0 (clear‐
ing any pending alarm), and all interval timers are set to 0
(disabled).
Fine-grained privileges are inherited through a calculation to
determine which, if any, of the parent process' privileges are
inherited by the child.
The system call can be used to fork processes more quickly than but has
some restrictions. See vfork(2) for details.
If a parent and child process both have a file opened and the parent or
child closes the file, the file is still open for the other process.
Security Restrictions
This system call requires the privilege in order to exceed the per-user
process limit Processes owned by the superuser have this privilege.
Processes owned by other users may have this privilege, depending on
system configuration. See privileges(5) for more information about
privileged access on systems that support fine-grained privileges.
RETURN VALUE
Upon successful completion, returns a value of to the child process and
returns the process ID of the child process to the parent process.
Otherwise, a value of is returned to the parent process, no child
process is created, and is set to indicate the error.
The parent and child processes resume execution immediately after the
call; they are distinguished by the value returned by
ERRORS
If fails, is set to one of the following values.
The system-imposed limit on the total number of processes under
execution
would be exceeded.
The system-imposed limit on the total number of processes under
execution
by a single user would be exceeded.
There is insufficient swap space and/or physical memory
available in which to create the new process.
The privilege is not present in the effective set of
the calling process.
WARNINGS
Standard I/O streams (see stdio(3S)) are duplicated in the child.
Therefore, if is called after a buffered I/O operation without first
closing or flushing the associated standard I/O stream (see
fclose(3S)), the buffered input or output might be duplicated.
DEPENDENCIES
HP Process Resource Manager
If the optional HP Process Resource Manager (PRM) software is installed
and configured, the child process inherits the parent's process
resource group ID. See prmconfig(1) for a description of how to con‐
figure HP PRM, and prmconf(4) for the definition of process resource
group.
AUTHOR
was developed by AT&T, the University of California, Berkeley, and HP.
SEE ALSOcoreadm(1M), acct(2), chroot(2), coreadm(2), exec(2), exit(2),
fcntl(2), getgroups(2), lockf(2), nice(2), plock(2), profil(2),
pthread_atfork(3T), ttrace(2), rtprio(2), semop(2), setpgrp(2),
setuid(2), shmop(2), times(2), ulimit(2), umask(2), vfork(2), wait(2),
fclose(3S), stdio(3S), acct(4), compartments(5), privileges(5), sig‐
nal(5).
HP Process Resource Manager: prmconfig(1), prmconf(4) in
STANDARDS CONFORMANCEfork(2)