Annotation of 43BSDReno/lib/libc/sys/vfork.2, revision 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.