Unix/Linux Go Back    


NetBSD 6.1.5 - man page for fork1 (netbsd section 9)

Linux & Unix Commands - Search Man Pages
Man Page or Keyword Search:   man
Select Man Page Set:       apropos Keyword Search (sections above)


FORK1(9)			  BSD Kernel Developer's Manual 			 FORK1(9)

NAME
     fork1 -- create a new process

SYNOPSIS
     #include <sys/types.h>
     #include <sys/proc.h>

     int
     fork1(struct lwp *l1, int flags, int exitsig, void *stack, size_t stacksize,
	 void (*func)(void *), void *arg, register_t *retval, struct proc **rnewprocp);

DESCRIPTION
     fork1() creates a new process out of the process behind l1, which is assumed to be the cur-
     rent lwp.	This function is used primarily to implement the fork(2) and vfork(2) system
     calls, but is versatile enough to be used as a backend for e.g. the __clone(2) call.

     The flags argument controls the semantics of the fork operation, and is made up of the bit-
     wise-OR of the following values:

     FORK_PPWAIT      The parent process will sleep until the child process successfully calls
		      execve(2) or exits (either by a call to _exit(2) or abnormally).

     FORK_SHAREVM     The child process will share the parent's virtual address space.	If this
		      flag is not specified, the child will get a copy-on-write snapshot of the
		      parent's address space.

     FORK_SHARECWD    The child process will share the parent's current directory, root direc-
		      tory, and file creation mask.

     FORK_SHAREFILES  The child process will share the parent's file descriptors.

     FORK_SHARESIGS   The child process will share the parent's signal actions.

     FORK_NOWAIT      The child process will at creation time be inherited by the init process.

     FORK_CLEANFILES  The child process will not copy or share the parent's descriptors, but
		      rather will start out with a clean set.

     A flags value of 0 indicates a standard fork operation.

     The exitsig argument controls the signal sent to the parent on child death.  If normal oper-
     ation desired, SIGCHLD should be supplied.

     It is possible to specify the child userspace stack location and size by using the stack and
     stacksize arguments, respectively.  Values NULL and 0, respectively, will give the child the
     default values for the machine architecture in question.

     The arguments func and arg can be used to specify a kernel function to be called when the
     child process returns instead of child_return().  These are used for example in starting the
     init process and creating kernel threads.

     The retval argument is provided for the use of system call stubs.	If retval is not NULL, it
     will hold the following values after successful completion of the fork operation:

     retval[0]	This will contain the pid of the child process.

     retval[1]	In the parent process, this will contain the value 0.  In the child process, this
		will contain 1.

     User level system call stubs typically subtract 1 from retval[1] and bitwise-AND it with
     retval[0], thus returning the pid to the parent process and 0 to the child.

     If rnewprocp is not NULL, *rnewprocp will point to the newly created process upon successful
     completion of the fork operation.

RETURN VALUES
     Upon successful completion of the fork operation, fork1() returns 0.  Otherwise, the follow-
     ing error values are returned:

     [EAGAIN]  The limit on the total number of system processes would be exceeded.

     [EAGAIN]  The limit RLIMIT_NPROC on the total number of processes under execution by this
	       user id would be exceeded.

SEE ALSO
     execve(2), fork(2), vfork(2)

BSD					 January 4, 2008				      BSD
Unix & Linux Commands & Man Pages : ©2000 - 2018 Unix and Linux Forums


All times are GMT -4. The time now is 07:51 PM.