FORK1(9) BSD Kernel Manual FORK1(9)
fork1 - create a new process
#include <sys/types.h> #include <sys/proc.h> int fork1(struct proc *p1, int exitsig, int flags, void *stack, size_t stacksize, void (*func)(void *), void *arg, register_t *retval);
fork1() creates a new process out of p1, which should be the current pro- cess. This function is used primarily to implement the fork(2), rfork(2), vfork(2) system calls, as well as the kthread_create(9) function. The flags argument is used to control the behavior of the fork and is created by a bitwise-OR of the following values: FORK_FORK The call is done by the fork(2) system call. Used only for statistics. FORK_VFORK The call is done by the vfork(2) system call. Used only for statistics. FORK_RFORK The call is done by the rfork(2) system call. Used only for statistics. FORK_PPWAIT Suspend the parent process until the child is terminated (by calling _exit(2) or abnormally), or makes a call to execve(2). FORK_SHAREFILES Let the child share the file descriptor table with the parent through fdshare(9). The default behavior is to copy the table through fdcopy(9). FORK_CLEANFILES The child starts with a clean file descriptor table created by fdinit(9). FORK_NOZOMBIE The child will be dissociated from the parent and will not leave a status for the parent to collect. See wait(2). FORK_SHAREVM The child will share the parent's address space. The de- fault behavior is that the child gets a copy-on-write copy of the address space. If stack is not NULL, the area starting at stack of extent stacksize will be used for the child's stack, instead of cloning the parent's stack. If retval is not NULL, it will hold the following values after successful completion of the fork operation: retval This will contain the pid of the child process. retval In the parent process, this will contain the value 0. In the child process, this will contain 1. The signal exitsig is sent to the parent p1 on exit of the new process. If func is not NULL, the new process will begin execution by calling this function. It defaults to child_return, which returns to userland. If arg is not NULL, it is the argument to the previous function. It de- faults to a pointer to the new process.
Upon successful completion of the fork operation, fork1() returns 0. Oth- erwise, the following error values are returned: [EAGAIN] The limit on the total number of system processes would be ex- ceeded. [EAGAIN] The limit RLIMIT_NPROC on the total number of processes under execution by this user id would be exceeded.
execve(2), fork(2), rfork(2), vfork(2), kthread_create(9), pfind(9), psignal(9), uvm_fork(9)
The fork1 function semantics are specific to OpenBSD. Other BSD systems have different semantics. The system never uses fork1() with a non-null stack, so that feature is not even tested. MirOS BSD #10-current January 6, 1998 1
Generated on 2013-04-27 00:20:00 by $MirOS: src/scripts/roff2htm,v 1.77 2013/01/01 20:49:09 tg Exp $
These manual pages and other documentation are copyrighted by their respective writers;
their source is available at our CVSweb,
AnonCVS, and other mirrors. The rest is Copyright © 2002‒2013 The MirOS Project, Germany.
This product includes material provided by Thorsten Glaser.
This manual page’s HTML representation is supposed to be valid XHTML/1.1; if not, please send a bug report – diffs preferred.