xref: /freebsd-12.1/lib/libc/sys/vfork.2 (revision 06a31d6a)
1.\" Copyright (c) 1980, 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\"    notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\"    notice, this list of conditions and the following disclaimer in the
11.\"    documentation and/or other materials provided with the distribution.
12.\" 3. All advertising materials mentioning features or use of this software
13.\"    must display the following acknowledgement:
14.\"	This product includes software developed by the University of
15.\"	California, Berkeley and its contributors.
16.\" 4. Neither the name of the University nor the names of its contributors
17.\"    may be used to endorse or promote products derived from this software
18.\"    without specific prior written permission.
19.\"
20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30.\" SUCH DAMAGE.
31.\"
32.\"     @(#)vfork.2	8.1 (Berkeley) 6/4/93
33.\" $FreeBSD$
34.\"
35.Dd June 4, 1993
36.Dt VFORK 2
37.Os
38.Sh NAME
39.Nm vfork
40.Nd spawn new process in a virtual memory efficient way
41.Sh LIBRARY
42.Lb libc
43.Sh SYNOPSIS
44.In unistd.h
45.Ft pid_t
46.Fn vfork void
47.Sh DESCRIPTION
48The
49.Fn vfork
50system call
51can be used to create new processes without fully copying the address
52space of the old process, which is horrendously inefficient in a paged
53environment.  It is useful when the purpose of
54.Xr fork 2
55would have been to create a new system context for an
56.Xr execve 2 .
57The
58.Fn vfork
59system call
60differs from
61.Xr fork 2
62in that the child borrows the parent's memory and thread of
63control until a call to
64.Xr execve 2
65or an exit (either by a call to
66.Xr _exit 2
67or abnormally).
68The parent process is suspended while the child is using its resources.
69.Pp
70The
71.Fn vfork
72system call
73returns 0 in the child's context and (later) the pid of the child in
74the parent's context.
75.Pp
76The
77.Fn vfork
78system call
79can normally be used just like
80.Xr fork 2 .
81It does not work, however, to return while running in the child's context
82from the procedure that called
83.Fn vfork
84since the eventual return from
85.Fn vfork
86would then return to a no longer existent stack frame.
87Be careful, also, to call
88.Xr _exit 2
89rather than
90.Xr exit 3
91if you can't
92.Xr execve 2 ,
93since
94.Xr exit 3
95will flush and close standard I/O channels, and thereby mess up the
96parent processes standard I/O data structures.
97(Even with
98.Xr fork 2
99it is wrong to call
100.Xr exit 3
101since buffered data would then be flushed twice.)
102.Sh SEE ALSO
103.Xr execve 2 ,
104.Xr fork 2 ,
105.Xr rfork 2 ,
106.Xr sigvec 2 ,
107.Xr wait 2 ,
108.Xr _exit 2 ,
109.Xr exit 3
110.Sh RETURN VALUES
111Same as for
112.Xr fork 2 .
113.Sh BUGS
114This system call will be eliminated when proper system sharing
115mechanisms are implemented.
116Users should not depend on the memory
117sharing semantics of
118.Fn vfork
119as it will, in that case, be made synonymous to
120.Xr fork 2 .
121.Pp
122To avoid a possible deadlock situation,
123processes that are children in the middle
124of a
125.Fn vfork
126are never sent
127.Dv SIGTTOU
128or
129.Dv SIGTTIN
130signals; rather,
131output or
132.Xr ioctl 2
133calls
134are allowed
135and input attempts result in an end-of-file indication.
136.Sh HISTORY
137The
138.Fn vfork
139system call appeared in
140.Bx 2.9 .
141