NAME | SYNOPSIS | API RESTRICTIONS | DESCRIPTION | RETURN VALUES | ERRORS | RESTRICTIONS | ATTRIBUTES | SEE ALSO
#include <unistd.h>pid_t fork(void);
The function or functions documented here may not be used safely in all application contexts with all APIs provided in the ChorusOS 5.0 product.
See API(5FEA) for details.
fork() causes creation of a new process. The new process (child process) is an exact copy of the calling process (parent process) except for the following:
The child process has a unique process ID.
The child process has a different parent process ID (that is, the process ID of the parent process).
The child process has its own copy of the parent's descriptors. These descriptors reference the same underlying objects, so that, for instance, file pointers in file objects are shared between the child and the parent, so that an lseek(2POSIX) on a descriptor in the child process can affect a subsequent read(2POSIX) or write(2POSIX) by the parent. This descriptor copying is also used by the shell to establish standard input and output for newly created processes as well as to set up pipes.
The child process resource utilizations are set to 0; see setrlimit(2POSIX).
The fork function cannot be used by supervisor processes.
Upon successful completion, fork() 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 fork() function will fail and no child process will be created if:
The
system-imposed limit on the total number of processes under execution would
be exceeded. The limit is given by the sysctl(3POSIX) MIB variable KERN_MAXPROC
. (The limit is actually one less than this except
for the super user).
There is insufficient swap space for the new process.
The operation would be performed in system address space.
The operation is not supported.
When a process forks, it must be mono-threaded at the time of the fork. The fork is refused if the invoking process has more than one thread at the time of the fork.
The fork() system call is available only for applications executing in the user address space (see MEM(5FEA)). Hence it applies to applications running either in supervisor address space in MEM_PROTECTED or MEM_VIRTUAL profiles and to all applications in the MEM_FLAT profile.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
MT-Level | Async-Signal-Safe |
NAME | SYNOPSIS | API RESTRICTIONS | DESCRIPTION | RETURN VALUES | ERRORS | RESTRICTIONS | ATTRIBUTES | SEE ALSO