Annotation of 43BSDReno/lib/libc/sys/vfork.2, revision 1.1.1.1

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.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.