RFORK(2) | System Calls Manual | RFORK(2) |
rfork
— manipulate
process resources
Standard C Library (libc, -lc)
#include
<unistd.h>
pid_t
rfork
(int
flags);
Forking, vforking or rforking are the only ways new processes are
created. The flags argument to
rfork
()
selects which resources of the invoking process (parent) are shared by the
new process (child) or initialized to their default values. The resources
include the open file descriptor table (which, when shared, permits
processes to open and close files for other processes), and open files. The
flags argument is the logical OR of some subset
of:
RFPROC
RFNOWAIT
RFFDG
RFCFDG
RFFDG
.RFTHREAD
RFFDG
nor RFCFDG
are set.RFMEM
rfork
() with the RFMEM flag may not generally be
called directly from high level languages including C. May be set only
with RFPROC
. A helper function is provided to
assist with this problem and will cause the new process to run on the
provided stack. See rfork_thread(3) for information.
Note that a lot of code will not run correctly in such an
environment.RFSIGSHARE
RFTSIGZMB
signum
is specified by oring the
RFTSIGFLAGS(signum)
expression into
flags. Specifying signal number 0 disables signal
delivery upon the child exit.RFLINUXTHPN
File descriptors in a shared file descriptor table are kept open until either they are explicitly closed or all processes sharing the table exit.
If RFPROC
is set, the value
returned in the parent process is the process id of the child process; the
value returned in the child is zero. Without RFPROC
,
the return value is zero. Process id's range from 1 to the maximum integer
(int) value. The
rfork
()
system call will sleep, if necessary, until required process resources are
available.
The
fork
() system
call can be implemented as a call to
rfork
(RFFDG | RFPROC) but is
not for backwards compatibility.
Upon successful completion, rfork
()
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.
The rfork
() system call will fail and no
child process will be created if:
EAGAIN
]KERN_MAXPROC
. (The limit is actually
ten less than this except for the super user).EAGAIN
]KERN_MAXPROCPERUID
.EAGAIN
]RLIMIT_NOFILE
would be exceeded (see
getrlimit(2)).EINVAL
]EINVAL
]EINVAL
]ENOMEM
]fork(2), intro(2), minherit(2), vfork(2), pthread_create(3), rfork_thread(3)
The rfork
() function first appeared in
Plan9.
July 12, 2011 | Debian |