|
|
1.1 root 1: .\" Copyright (c) 1980 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)vfork.2 6.2 (Berkeley) 6/30/85
6: .\"
7: .TH VFORK 2 "June 30, 1985"
8: .UC 4
9: .SH NAME
10: vfork \- spawn new process in a virtual memory efficient way
11: .SH SYNOPSIS
12: .B pid = vfork()
13: .br
14: .B int pid;
15: .SH DESCRIPTION
16: .I Vfork
17: can be used to create new processes without fully copying the address
18: space of the old process, which is horrendously inefficient in a paged
19: environment. It is useful when the purpose of
20: .IR fork (2)
21: would have been to create a new system context for an
22: .IR execve .
23: .I Vfork
24: differs from
25: .I fork
26: in that the child borrows the parent's memory and thread of
27: control until a call to
28: .IR execve (2)
29: or an exit (either by a call to
30: .IR exit (2)
31: or abnormally.)
32: The parent process is suspended while the child is using its resources.
33: .PP
34: .I Vfork
35: returns 0 in the child's context and (later) the pid of the child in
36: the parent's context.
37: .PP
38: .I Vfork
39: can normally be used just like
40: .I fork.
41: It does not work, however, to return while running in the childs context
42: from the procedure that called
43: .I vfork
44: since the eventual return from
45: .I vfork
46: would then return to a no longer existent stack frame.
47: Be careful, also, to call
48: .I _exit
49: rather than
50: .I exit
51: if you can't
52: .IR execve ,
53: since
54: .I exit
55: will flush and close standard I/O channels, and thereby mess up the
56: parent processes standard I/O data structures.
57: (Even with
58: .I fork
59: it is wrong to call
60: .I exit
61: since buffered data would then be flushed twice.)
62: .SH SEE ALSO
63: fork(2), execve(2), sigvec(2), wait(2),
64: .SH DIAGNOSTICS
65: Same as for
66: .IR fork .
67: .SH BUGS
68: This system call will be eliminated when proper system sharing
69: mechanisms are implemented.
70: Users should not depend on the memory
71: sharing semantics of
72: .I vfork
73: as it will, in that case, be made synonymous to
74: .IR fork .
75: .PP
76: To avoid a possible deadlock situation,
77: processes that are children in the middle
78: of a
79: .I vfork
80: are never sent SIGTTOU or SIGTTIN signals; rather,
81: output or
82: .IR ioctl s
83: are allowed
84: and input attempts result in an end-of-file indication.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.