summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/fork1.9
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man9/fork1.9')
-rw-r--r--static/netbsd/man9/fork1.9151
1 files changed, 151 insertions, 0 deletions
diff --git a/static/netbsd/man9/fork1.9 b/static/netbsd/man9/fork1.9
new file mode 100644
index 00000000..7844f622
--- /dev/null
+++ b/static/netbsd/man9/fork1.9
@@ -0,0 +1,151 @@
+.\" $NetBSD: fork1.9,v 1.16 2018/04/16 15:02:37 wiz Exp $
+.\"
+.\" Copyright (c) 1998 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
+.\" NASA Ames Research Center.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd April 16, 2018
+.Dt FORK1 9
+.Os
+.Sh NAME
+.Nm fork1
+.Nd create a new process
+.Sh SYNOPSIS
+.In sys/types.h
+.In sys/proc.h
+.Ft int
+.Fn "fork1" "struct lwp *l1" "int flags" "int exitsig" "void *stack" "size_t stacksize" "void (*func)(void *)" "void *arg" "register_t *retval"
+.Sh DESCRIPTION
+.Fn fork1
+creates a new process out of the process behind
+.Ar l1 ,
+which is assumed to be the current lwp.
+This function is used primarily to implement the
+.Xr fork 2
+and
+.Xr vfork 2
+system calls, but is versatile enough to be used as a backend for
+e.g. the
+.Xr __clone 2
+call.
+.Pp
+The
+.Ar flags
+argument controls the semantics of the fork operation, and is made up of
+the bitwise-OR of the following values:
+.Bl -tag -width FORK_SHAREFILES
+.It FORK_PPWAIT
+The parent process will sleep until the child process successfully calls
+.Xr execve 2
+or exits (either by a call to
+.Xr _exit 2
+or abnormally).
+.It 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.
+.It FORK_SHARECWD
+The child process will share the parent's current directory, root directory,
+and file creation mask.
+.It FORK_SHAREFILES
+The child process will share the parent's file descriptors.
+.It FORK_SHARESIGS
+The child process will share the parent's signal actions.
+.It FORK_NOWAIT
+The child process will at creation time be inherited by the init process.
+.It FORK_CLEANFILES
+The child process will not copy or share the parent's descriptors, but
+rather will start out with a clean set.
+.El
+.Pp
+A
+.Ar flags
+value of 0 indicates a standard fork operation.
+.Pp
+The
+.Ar exitsig
+argument controls the signal sent to the parent on child death.
+If normal operation desired, SIGCHLD should be supplied.
+.Pp
+It is possible to specify the child userspace stack location and size
+by using the
+.Ar stack
+and
+.Ar stacksize
+arguments, respectively.
+Values
+.Dv NULL
+and 0, respectively, will give the child the default values
+for the machine architecture in question.
+.Pp
+The arguments
+.Ar func
+and
+.Ar arg
+can be used to specify a kernel function to be called when the child process
+returns instead of
+.Fn child_return .
+These are used for example in starting the init process and creating kernel
+threads.
+.Pp
+The
+.Ar retval
+argument is provided for the use of system call stubs.
+If
+.Ar retval
+is not NULL, it will hold the following values after successful completion
+of the fork operation:
+.Bl -tag -width retval[0]
+.It Ar retval[0]
+This will contain the pid of the child process.
+.It Ar retval[1]
+In the parent process, this will contain the value 0.
+In the child process, this will contain 1.
+.El
+.Pp
+User level system call stubs typically subtract 1 from
+.Ar retval[1]
+and bitwise-AND it with
+.Ar retval[0] ,
+thus returning the pid to the parent process and 0 to the child.
+.Sh RETURN VALUES
+Upon successful completion of the fork operation,
+.Fn fork1
+returns 0.
+Otherwise, the following error values are returned:
+.Bl -tag -width [EAGAIN]
+.It Bq Er EAGAIN
+The limit on the total number of system processes would be exceeded;
+or the limit
+.Dv RLIMIT_NPROC
+on the total number of processes under execution by this
+user id would be exceeded.
+.El
+.Sh SEE ALSO
+.Xr execve 2 ,
+.Xr fork 2 ,
+.Xr vfork 2