Print this page
5776 vfork and getwd should not be exposed under XPG7
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/man/man2/vfork.2
+++ new/usr/src/man/man2/vfork.2
1 -'\" te
1 +.\" Copyright 2014 Garrett D'Amore <garrett@damore.org>
2 2 .\" Copyright (c) 2004, Sun Microsystems, Inc. All Rights Reserved.
3 3 .\" Copyright 1989 AT&T.
4 -.\" Copyright (c) 1980 Regents of the University of California. All rights reserved. The Berkeley software License Agreement specifies the terms and conditions for redistribution.
5 -.TH VFORK 2 "Dec 13, 2006"
6 -.SH NAME
7 -vfork, vforkx \- spawn new process in a virtual memory efficient way
8 -.SH SYNOPSIS
9 -.LP
10 -.nf
11 -#include <unistd.h>
12 -
13 -\fBpid_t\fR \fBvfork\fR(\fBvoid\fR);
14 -.fi
15 -
16 -.LP
17 -.nf
18 -#include <sys/fork.h>
19 -
20 -\fBpid_t\fR \fBvforkx\fR(\fBint\fR \fIflags\fR);
21 -.fi
22 -
23 -.SH DESCRIPTION
24 -.sp
25 -.LP
26 -The \fBvfork()\fR and \fBvforkx()\fR functions create a new process without
4 +.\" Copyright (c) 1980 Regents of the University of California.
5 +.\" All rights reserved. The Berkeley software License Agreement
6 +.\" specifies the terms and conditions for redistribution.
7 +.Dd Aug 20, 2014
8 +.Dt VFORK 2
9 +.Os
10 +.Sh NAME
11 +.Nm vfork ,
12 +.Nm vforkx
13 +.Nd spawn new process in a virtual memory efficient way
14 +.Sh SYNOPSIS
15 +.In unistd.h
16 +.Ft pid_t
17 +.Fn vfork void
18 +.
19 +.In sys/fork.h
20 +.Ft pid_t
21 +.Fn vforkx "int flags"
22 +.Sh DESCRIPTION
23 +The
24 +.Fn vfork
25 +and
26 +.Fn vforkx
27 +functions create a new process without
27 28 fully copying the address space of the old process. These functions are useful
28 -in instances where the purpose of a \fBfork\fR(2) operation is to create a new
29 -system context for an \fBexecve()\fR operation (see \fBexec\fR(2)).
30 -.sp
31 -.LP
32 -Unlike with the \fBfork()\fR function, the child process borrows the parent's
33 -memory and thread of control until a call to \fBexecve()\fR or an exit (either
34 -abnormally or by a call to \fB_exit()\fR (see \fBexit\fR(2)). Any modification
29 +in instances where the purpose of a
30 +.Xr fork 2
31 +operation is to create a new
32 +system context for an
33 +.Xr exec 2
34 +operation.
35 +.Lp
36 +Unlike with the
37 +.Fn fork
38 +function, the child process borrows the parent's
39 +memory and thread of control until a call to
40 +.Fn execve
41 +or an exit
42 +.Pq either abnormally or by a call to Xr _exit 2 .
43 +Any modification
35 44 made during this time to any part of memory in the child process is reflected
36 -in the parent process on return from \fBvfork()\fR or \fBvforkx()\fR. The
37 -parent process is suspended while the child is using its resources.
38 -.sp
39 -.LP
40 -In a multithreaded application, \fBvfork()\fR and \fBvforkx()\fR borrow only
41 -the thread of control that called \fBvfork()\fR or \fBvforkx()\fR in the
42 -parent; that is, the child contains only one thread. The use of \fBvfork()\fR
43 -or \fBvforkx()\fR in multithreaded applications, however, is unsafe due to race
45 +in the parent process on return from
46 +.Fn vfork
47 +or
48 +.Fn vforkx .
49 +The parent process is suspended while the child is using its resources.
50 +.Lp
51 +In a multithreaded application,
52 +.Fn vfork
53 +and
54 +.Fn vforkx
55 +borrow only the thread of control that called
56 +.Fn vfork
57 +or
58 +.Fn vforkx
59 +in the parent; that is, the child contains only one thread. The use of
60 +.Fn vfork
61 +or
62 +.Fn vforkx
63 +in multithreaded applications, however, is unsafe due to race
44 64 conditions that can cause the child process to become deadlocked and
45 65 consequently block both the child and parent process from execution
46 66 indefinitely.
47 -.sp
48 -.LP
49 -The \fBvfork()\fR and \fBvforkx()\fR functions can normally be used the same
50 -way as \fBfork()\fR and \fBforkx()\fR, respectively. The calling procedure,
67 +.Lp
68 +The
69 +.Fn vfork
70 +and
71 +.Fn vforkx
72 +functions can normally be used the same way as
73 +.Fn fork
74 +and
75 +.Fn forkx ,
76 +respectively. The calling procedure,
51 77 however, should not return while running in the child's context, since the
52 -eventual return from \fBvfork()\fR or \fBvforkx()\fR in the parent would be to
53 -a stack frame that no longer exists. The \fB_exit()\fR function should be used
54 -in favor of \fBexit\fR(3C) if unable to perform an \fBexecve()\fR operation,
55 -since \fBexit()\fR will invoke all functions registered by \fBatexit\fR(3C) and
56 -will flush and close standard I/O channels, thereby corrupting the parent
78 +eventual return from
79 +.Fn vfork
80 +or
81 +.Fn vforkx
82 +in the parent would be to
83 +a stack frame that no longer exists. The
84 +.Fn _exit
85 +function should be used
86 +in favor of
87 +.Xr exit 3C
88 +if unable to perform an
89 +.Fn execve
90 +operation, since
91 +.Fn exit
92 +will invoke all functions registered by
93 +.Xr atexit 3C
94 +and will flush and close standard I/O channels, thereby corrupting the parent
57 95 process's standard I/O data structures. Care must be taken in the child process
58 96 not to modify any global or local data that affects the behavior of the parent
59 -process on return from \fBvfork()\fR or \fBvforkx()\fR, unless such an effect
97 +process on return from
98 +.Fn vfork
99 +or
100 +.Fn vforkx ,
101 +unless such an effect
60 102 is intentional.
61 -.sp
62 -.LP
63 -Unlike \fBfork()\fR and \fBforkx()\fR, fork handlers are not run when
64 -\fBvfork()\fR and \fBvforkx()\fR are called.
65 -.sp
66 -.LP
67 -The \fBvfork()\fR and \fBvforkx()\fR functions are deprecated. Their sole
103 +.Lp
104 +Unlike
105 +.Fn fork
106 +and
107 +.Fn forkx ,
108 +fork handlers are not run when
109 +.Fn vfork
110 +and
111 +.Fn vforkx
112 +are called.
113 +.Lp
114 +The
115 +.Fn vfork
116 +and
117 +.Fn vforkx
118 +functions are deprecated. Their sole
68 119 legitimate use as a prelude to an immediate call to a function from the
69 -\fBexec\fR family can be achieved safely by \fBposix_spawn\fR(3C) or
70 -\fBposix_spawnp\fR(3C).
71 -.SS "Fork Extensions"
72 -.sp
73 -.LP
74 -The \fBvforkx()\fR function accepts a \fIflags\fR argument consisting of a
120 +.Xr exec 2
121 +family can be achieved safely by
122 +.Xr posix_spawn 3C
123 +or
124 +.Xr posix_spawnp 3C .
125 +.Ss "Fork Extensions"
126 +The
127 +.Fn vforkx
128 +function accepts a
129 +.Fa flags
130 +argument consisting of a
75 131 bitwise inclusive-OR of zero or more of the following flags, which are defined
76 -in the header \fB<sys/fork.h>\fR:
77 -.br
78 -.in +2
79 -\fBFORK_NOSIGCHLD\fR
80 -.in -2
81 -.br
82 -.in +2
83 -\fBFORK_WAITPID\fR
84 -.in -2
85 -.sp
86 -.LP
87 -See \fBfork\fR(2) for descriptions of these flags. If the \fIflags\fR argument
88 -is 0, \fBvforkx()\fR is identical to \fBvfork()\fR.
89 -.SH RETURN VALUES
90 -.sp
91 -.LP
92 -Upon successful completion, \fBvfork()\fR and \fBvforkx()\fR return \fB0\fR to
93 -the child process and returns the process ID of the child process to the parent
94 -process. Otherwise, \fB\(mi1\fR is returned to the parent process, no child
95 -process is created, and \fBerrno\fR is set to indicate the error.
96 -.SH ERRORS
97 -.sp
98 -.LP
99 -The \fBvfork()\fR and \fBvforkx()\fR functions will fail if:
100 -.sp
101 -.ne 2
102 -.na
103 -\fB\fBEAGAIN\fR\fR
104 -.ad
105 -.RS 10n
132 +in the header
133 +.In sys/fork.h :
134 +.Lp
135 +.Bl -item -compact -offset indent
136 +.It
137 +.Dv FORK_NOSIGCHLD
138 +.It
139 +.Dv FORK_WAITPID
140 +.El
141 +.Lp
142 +See
143 +.Xr fork 2
144 +for descriptions of these flags. If the
145 +.Fa flags
146 +argument is 0,
147 +.Fn vforkx
148 +is identical to
149 +.Fn vfork .
150 +.Sh RETURN VALUES
151 +Upon successful completion,
152 +.Fn vfork
153 +and
154 +.Fn vforkx
155 +return 0 to
156 +the child process and return the process ID of the child process to the parent
157 +process. Otherwise, \(mi1 is returned to the parent process, no child
158 +process is created, and
159 +.Va errno
160 +is set to indicate the error.
161 +.Sh ERRORS
162 +The
163 +.Fn vfork
164 +and
165 +.Fn vforkx
166 +functions will fail if:
167 +.Bl -tag -width Er
168 +.It Er EAGAIN
106 169 The system-imposed limit on the total number of processes under execution
107 170 (either system-quality or by a single user) would be exceeded. This limit is
108 171 determined when the system is generated.
109 -.RE
110 -
111 -.sp
112 -.ne 2
113 -.na
114 -\fB\fBENOMEM\fR\fR
115 -.ad
116 -.RS 10n
172 +.
173 +.It Er ENOMEM
117 174 There is insufficient swap space for the new process.
118 -.RE
119 -
120 -.sp
121 -.LP
122 -The \fBvforkx()\fR function will fail if:
123 -.sp
124 -.ne 2
125 -.na
126 -\fB\fBEINVAL\fR\fR
127 -.ad
128 -.RS 10n
129 -The \fIflags\fR argument is invalid.
130 -.RE
131 -
132 -.SH ATTRIBUTES
133 -.sp
134 -.LP
135 -See \fBattributes\fR(5) for descriptions of the following attributes:
136 -.sp
137 -
138 -.sp
139 -.TS
140 -box;
141 -c | c
142 -l | l .
143 -ATTRIBUTE TYPE ATTRIBUTE VALUE
144 -_
145 -Interface Stability Obsolete
146 -_
147 -MT-Level Unsafe
148 -.TE
149 -
150 -.SH SEE ALSO
151 -.sp
152 -.LP
153 -\fBexec\fR(2), \fBexit\fR(2), \fBfork\fR(2), \fBioctl\fR(2), \fBatexit\fR(3C),
154 -\fBexit\fR(3C), \fBposix_spawn\fR(3C), \fBposix_spawnp\fR(3C),
155 -\fBsignal.h\fR(3HEAD), \fBwait\fR(3C), \fBattributes\fR(5), \fBstandards\fR(5)
156 -.SH NOTES
157 -.sp
158 -.LP
175 +.El
176 +.Lp
177 +The
178 +.Fn vforkx
179 +function will fail if:
180 +.Bl -tag -width Er
181 +.It Er EINVAL
182 +The
183 +.Va flags
184 +argument is invalid.
185 +.El
186 +.Sh INTERFACE STABILITY
187 +The
188 +.Fn vfork
189 +function is
190 +.Sy Obsolete Standard .
191 +.Lp
192 +The
193 +.Fn vforkx
194 +function is
195 +.Sy Obsolete Uncommitted .
196 +.Sh MT-LEVEL
197 +.Sy Unsafe .
198 +.Sh SEE ALSO
199 +.Xr exec 2 ,
200 +.Xr exit 2 ,
201 +.Xr fork 2 ,
202 +.Xr ioctl 2 ,
203 +.Xr atexit 3C ,
204 +.Xr exit 3C ,
205 +.Xr posix_spawn 3C ,
206 +.Xr posix_spawnp 3C ,
207 +.Xr signal.h 3HEAD ,
208 +.Xr wait 3C ,
209 +.Xr standards 5
210 +.Sh NOTES
159 211 To avoid a possible deadlock situation, processes that are children in the
160 -middle of a \fBvfork()\fR or \fBvforkx()\fR are never sent \fBSIGTTOU\fR or
161 -\fBSIGTTIN\fR signals; rather, output or ioctls are allowed and input attempts
162 -result in an \fBEOF\fR indication.
163 -.sp
164 -.LP
212 +middle of a
213 +.Fn vfork
214 +or
215 +.Fn vforkx
216 +are never sent
217 +.Dv SIGTTOU
218 +or
219 +.Dv SIGTTIN
220 +signals; rather, output or ioctls are allowed and input attempts
221 +result in an
222 +.Dv EOF
223 +indication.
224 +.Lp
165 225 To forestall parent memory corruption due to race conditions with signal
166 -handling, \fBvfork()\fR and \fBvforkx()\fR treat signal handlers in the child
167 -process in the same manner as the \fBexec\fR(2) functions: signals set to be
168 -caught by the parent process are set to the default action (\fBSIG_DFL\fR) in
169 -the child process (see \fBsignal.h\fR(3HEAD)). Any attempt to set a signal
170 -handler in the child before \fBexecve()\fR to anything other than \fBSIG_DFL\fR
171 -or \fBSIG_IGN\fR is disallowed and results in setting the handler to
172 -\fBSIG_DFL\fR.
173 -.sp
174 -.LP
175 -On some systems, the implementation of \fBvfork()\fR and \fBvforkx()\fR cause
226 +handling,
227 +.Fn vfork
228 +and
229 +.Fn vforkx
230 +treat signal handlers in the child
231 +process in the same manner as the
232 +.Xr exec 2
233 +functions: signals set to be
234 +caught by the parent process are set to the default action
235 +.Pq Dv SIG_DFL
236 +in the child process
237 +.Pq see Xr signal.h 3HEAD .
238 +Any attempt to set a signal
239 +handler in the child before
240 +.Fn execve
241 +to anything other than
242 +.Dv SIG_DFL
243 +or
244 +.Dv SIG_IGN
245 +is disallowed and results in setting the handler to
246 +.Dv SIG_DFL .
247 +.Lp
248 +On some systems, the implementation of
249 +.Fn vfork
250 +and
251 +.Fn vforkx
252 +cause
176 253 the parent to inherit register values from the child. This can create problems
177 -for certain optimizing compilers if \fB<unistd.h>\fR is not included in the
178 -source calling \fBvfork()\fR or if \fB<sys/fork.h>\fR is not included in the
179 -source calling \fBvforkx()\fR.
254 +for certain optimizing compilers if
255 +.In unistd.h
256 +is not included in the source calling
257 +.Fn vfork
258 +or if
259 +.In sys/fork.h
260 +is not included in the
261 +source calling
262 +.Fn vforkx .
263 +.Sh STANDARDS
264 +The
265 +.Fn vfork
266 +function is available in the following compilation environments. See
267 +.Xr standards 5 .
268 +.Lp
269 +.Bl -bullet -compact
270 +.It
271 +.St -xpg4.2
272 +.It
273 +.St -susv2
274 +.It
275 +.St -susv3
276 +.El
277 +.Lp
278 +It was marked obsolete in
279 +.St -susv3
280 +and removed from
281 +.St -p1003.1-2008 .
282 +.Lp
283 +The
284 +.Fn vforkx
285 +function is a local extension and not available in any strictly
286 +standards-compliant compilation environment.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX