FORK1(9)                     NetBSD Kernel Manual                     FORK1(9)

     fork1 - create a new process

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

     fork1(struct proc *p1, int flags, register_t *retval,
             struct proc **rnewprocp);

     fork1() creates a new process out of p1, which is assumed to be the cur-
     rent process.  This function is used primarily to implement the fork(2)
     and vfork(2) system calls.

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

     FORK_PPWAIT   The parent process will sleep until the child process suc-
                   cessfully 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.

     A flags value of 0 indicates a standard fork operation.

     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 bit-
     wise-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 pro-
     cess upon successful completion of the fork operation.

     Upon successful completion of the fork operation, fork1() returns 0.
     Otherwise, the following error values are returned:

     [EAGAIN]  The limit on the total number of system processes would be ex-

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

     execve(2), fork(2), vfork(2)

NetBSD 1.6                      January 6, 1998                              1

You can also request any man page by name and (optionally) by section:


Use the DEFAULT collection to view manual pages for third-party software.

©1994 Man-cgi 1.15, Panagiotis Christias <>
©1996-2014 Modified for NetBSD by Kimmo Suominen