Blame


1 cfa37a7b 2004-04-10 devnull .TH FORK 3
2 cfa37a7b 2004-04-10 devnull .SH NAME
3 cfa37a7b 2004-04-10 devnull fork, rfork \- manipulate process resources
4 cfa37a7b 2004-04-10 devnull .SH SYNOPSIS
5 cfa37a7b 2004-04-10 devnull .B #include <u.h>
6 cfa37a7b 2004-04-10 devnull .br
7 cfa37a7b 2004-04-10 devnull .B #include <libc.h>
8 cfa37a7b 2004-04-10 devnull .PP
9 cfa37a7b 2004-04-10 devnull .nf
10 cfa37a7b 2004-04-10 devnull .B
11 cfa37a7b 2004-04-10 devnull int fork(void)
12 cfa37a7b 2004-04-10 devnull .PP
13 cfa37a7b 2004-04-10 devnull .B
14 cfa37a7b 2004-04-10 devnull int rfork(int flags)
15 cfa37a7b 2004-04-10 devnull .fi
16 cfa37a7b 2004-04-10 devnull .SH DESCRIPTION
17 cfa37a7b 2004-04-10 devnull Forking is the only way new processes are created.
18 cfa37a7b 2004-04-10 devnull The
19 cfa37a7b 2004-04-10 devnull .I flags
20 cfa37a7b 2004-04-10 devnull argument to
21 cfa37a7b 2004-04-10 devnull .I rfork
22 cfa37a7b 2004-04-10 devnull selects which resources of the
23 cfa37a7b 2004-04-10 devnull invoking process (parent) are shared
24 cfa37a7b 2004-04-10 devnull by the new process (child) or initialized to
25 cfa37a7b 2004-04-10 devnull their default values.
26 cfa37a7b 2004-04-10 devnull The resources include
27 cfa37a7b 2004-04-10 devnull the file name space,
28 cfa37a7b 2004-04-10 devnull the open file descriptor table (which, when shared, permits processes
29 cfa37a7b 2004-04-10 devnull to open and close files for other processes),
30 cfa37a7b 2004-04-10 devnull the set of environment variables
31 cfa37a7b 2004-04-10 devnull (see
32 cfa37a7b 2004-04-10 devnull .IR env (3)),
33 cfa37a7b 2004-04-10 devnull the note group
34 cfa37a7b 2004-04-10 devnull (the set of processes that receive notes written to a member's
35 cfa37a7b 2004-04-10 devnull .B notepg
36 cfa37a7b 2004-04-10 devnull file;
37 cfa37a7b 2004-04-10 devnull see
38 cfa37a7b 2004-04-10 devnull .IR proc (3)),
39 cfa37a7b 2004-04-10 devnull the set of rendezvous tags
40 cfa37a7b 2004-04-10 devnull (see
41 bf8a59fa 2004-04-11 devnull .IR rendezvous (3));
42 cfa37a7b 2004-04-10 devnull and open files.
43 cfa37a7b 2004-04-10 devnull .I Flags
44 cfa37a7b 2004-04-10 devnull is the logical OR of some subset of
45 cfa37a7b 2004-04-10 devnull .TF RFCNAMEG
46 cfa37a7b 2004-04-10 devnull .TP
47 cfa37a7b 2004-04-10 devnull .B RFPROC
48 cfa37a7b 2004-04-10 devnull If set a new process is created; otherwise changes affect the
49 cfa37a7b 2004-04-10 devnull current process.
50 cfa37a7b 2004-04-10 devnull .TP
51 cfa37a7b 2004-04-10 devnull .B RFNOWAIT
52 cfa37a7b 2004-04-10 devnull If set, the child process will be dissociated from the parent. Upon
53 cfa37a7b 2004-04-10 devnull exit the child will leave no
54 cfa37a7b 2004-04-10 devnull .B Waitmsg
55 cfa37a7b 2004-04-10 devnull (see
56 bf8a59fa 2004-04-11 devnull .IR wait (3))
57 cfa37a7b 2004-04-10 devnull for the parent to collect.
58 cfa37a7b 2004-04-10 devnull .TP
59 cfa37a7b 2004-04-10 devnull .B RFNAMEG
60 cfa37a7b 2004-04-10 devnull If set, the new process inherits a copy of the parent's name space;
61 cfa37a7b 2004-04-10 devnull otherwise the new process shares the parent's name space.
62 cfa37a7b 2004-04-10 devnull Is mutually exclusive with
63 cfa37a7b 2004-04-10 devnull .BR RFCNAMEG .
64 cfa37a7b 2004-04-10 devnull .TP
65 cfa37a7b 2004-04-10 devnull .B RFCNAMEG
66 cfa37a7b 2004-04-10 devnull If set, the new process starts with a clean name space. A new
67 cfa37a7b 2004-04-10 devnull name space must be built from a mount of an open file descriptor.
68 cfa37a7b 2004-04-10 devnull Is mutually exclusive with
69 cfa37a7b 2004-04-10 devnull .BR RFNAMEG .
70 cfa37a7b 2004-04-10 devnull .TP
71 cfa37a7b 2004-04-10 devnull .B RFNOMNT
72 cfa37a7b 2004-04-10 devnull If set, subsequent mounts into the new name space and dereferencing
73 cfa37a7b 2004-04-10 devnull of pathnames starting with
74 cfa37a7b 2004-04-10 devnull .B #
75 cfa37a7b 2004-04-10 devnull are disallowed.
76 cfa37a7b 2004-04-10 devnull .TP
77 cfa37a7b 2004-04-10 devnull .B RFENVG
78 cfa37a7b 2004-04-10 devnull If set, the environment variables are copied;
79 cfa37a7b 2004-04-10 devnull otherwise the two processes share environment variables.
80 cfa37a7b 2004-04-10 devnull Is mutually exclusive with
81 cfa37a7b 2004-04-10 devnull .BR RFCENVG .
82 cfa37a7b 2004-04-10 devnull .TP
83 cfa37a7b 2004-04-10 devnull .B RFCENVG
84 cfa37a7b 2004-04-10 devnull If set, the new process starts with an empty environment.
85 cfa37a7b 2004-04-10 devnull Is mutually exclusive with
86 cfa37a7b 2004-04-10 devnull .BR RFENVG .
87 cfa37a7b 2004-04-10 devnull .TP
88 cfa37a7b 2004-04-10 devnull .B RFNOTEG
89 cfa37a7b 2004-04-10 devnull Each process is a member of a group of processes that all
90 cfa37a7b 2004-04-10 devnull receive notes when a note is written to any of their
91 cfa37a7b 2004-04-10 devnull .B notepg
92 cfa37a7b 2004-04-10 devnull files (see
93 cfa37a7b 2004-04-10 devnull .IR proc (3)).
94 cfa37a7b 2004-04-10 devnull The group of a new process is by default the same as its parent, but if
95 cfa37a7b 2004-04-10 devnull .B RFNOTEG
96 cfa37a7b 2004-04-10 devnull is set (regardless of
97 cfa37a7b 2004-04-10 devnull .BR RFPROC ),
98 cfa37a7b 2004-04-10 devnull the process becomes the first in a new group, isolated from
99 cfa37a7b 2004-04-10 devnull previous processes.
100 cfa37a7b 2004-04-10 devnull .TP
101 cfa37a7b 2004-04-10 devnull .B RFFDG
102 cfa37a7b 2004-04-10 devnull If set, the invoker's file descriptor table (see
103 bf8a59fa 2004-04-11 devnull .IR intro (3))
104 cfa37a7b 2004-04-10 devnull is copied; otherwise the two processes share a
105 cfa37a7b 2004-04-10 devnull single table.
106 cfa37a7b 2004-04-10 devnull .TP
107 cfa37a7b 2004-04-10 devnull .B RFCFDG
108 cfa37a7b 2004-04-10 devnull If set, the new process starts with a clean file descriptor table.
109 cfa37a7b 2004-04-10 devnull Is mutually exclusive with
110 cfa37a7b 2004-04-10 devnull .BR RFFDG .
111 cfa37a7b 2004-04-10 devnull .TP
112 cfa37a7b 2004-04-10 devnull .B RFREND
113 cfa37a7b 2004-04-10 devnull If set, the process will be unable to
114 bf8a59fa 2004-04-11 devnull .IR rendezvous (3)
115 cfa37a7b 2004-04-10 devnull with any of its ancestors; its children will, however, be able to
116 cfa37a7b 2004-04-10 devnull .B rendezvous
117 cfa37a7b 2004-04-10 devnull with it. In effect,
118 cfa37a7b 2004-04-10 devnull .B RFREND
119 cfa37a7b 2004-04-10 devnull makes the process the first in a group of processes that share a space for
120 cfa37a7b 2004-04-10 devnull .B rendezvous
121 cfa37a7b 2004-04-10 devnull tags.
122 cfa37a7b 2004-04-10 devnull .TP
123 cfa37a7b 2004-04-10 devnull .B RFMEM
124 cfa37a7b 2004-04-10 devnull If set, the child and the parent will share
125 cfa37a7b 2004-04-10 devnull .B data
126 cfa37a7b 2004-04-10 devnull and
127 cfa37a7b 2004-04-10 devnull .B bss
128 cfa37a7b 2004-04-10 devnull segments.
129 cfa37a7b 2004-04-10 devnull Otherwise, the child inherits a copy of those segments.
130 cfa37a7b 2004-04-10 devnull Other segment types, in particular stack segments, will be unaffected.
131 cfa37a7b 2004-04-10 devnull May be set only with
132 cfa37a7b 2004-04-10 devnull .BR RFPROC .
133 cfa37a7b 2004-04-10 devnull .PD
134 cfa37a7b 2004-04-10 devnull .PP
135 cfa37a7b 2004-04-10 devnull File descriptors in a shared file descriptor table are kept
136 cfa37a7b 2004-04-10 devnull open until either they are explicitly closed
137 cfa37a7b 2004-04-10 devnull or all processes sharing the table exit.
138 cfa37a7b 2004-04-10 devnull .PP
139 cfa37a7b 2004-04-10 devnull If
140 cfa37a7b 2004-04-10 devnull .B RFPROC
141 cfa37a7b 2004-04-10 devnull is set, the
142 cfa37a7b 2004-04-10 devnull value returned in the parent process
143 cfa37a7b 2004-04-10 devnull is the process id
144 cfa37a7b 2004-04-10 devnull of the child process; the value returned in the child is zero.
145 cfa37a7b 2004-04-10 devnull Without
146 cfa37a7b 2004-04-10 devnull .BR RFPROC ,
147 cfa37a7b 2004-04-10 devnull the return value is zero.
148 cfa37a7b 2004-04-10 devnull Process ids range from 1 to the maximum integer
149 cfa37a7b 2004-04-10 devnull .RB ( int )
150 cfa37a7b 2004-04-10 devnull value.
151 cfa37a7b 2004-04-10 devnull .I Rfork
152 cfa37a7b 2004-04-10 devnull will sleep, if necessary, until required process resources are available.
153 cfa37a7b 2004-04-10 devnull .PP
154 cfa37a7b 2004-04-10 devnull .I Fork
155 cfa37a7b 2004-04-10 devnull is just a call of
156 cfa37a7b 2004-04-10 devnull .BR rfork(RFFDG|RFREND|RFPROC) .
157 cfa37a7b 2004-04-10 devnull .SH SOURCE
158 b5fdffee 2004-04-19 devnull .B /usr/local/plan9/src/libc/9syscall
159 cfa37a7b 2004-04-10 devnull .br
160 b5fdffee 2004-04-19 devnull .B /usr/local/plan9/src/libc/9sys/fork.c
161 cfa37a7b 2004-04-10 devnull .SH SEE ALSO
162 bf8a59fa 2004-04-11 devnull .IR intro (3),
163 cfa37a7b 2004-04-10 devnull .IR proc (3),
164 cfa37a7b 2004-04-10 devnull .SH DIAGNOSTICS
165 cfa37a7b 2004-04-10 devnull These functions set
166 cfa37a7b 2004-04-10 devnull .IR errstr .