qfork() (again)
Paul Eggert
eggert at twinsun.uucp
Fri Feb 1 13:18:25 AEST 1991
Submitted-by: eggert at twinsun.uucp (Paul Eggert)
... any definition which is safe on all architectures is liable to
constrain what one may do between [qv]fork() and exec() so greatly
that it turns out to be better to define a combined spawn() function.
What's wrong with the following definition, which permits the usual actions
between fork() and exec()? Isn't this definition easy to explain and support?
vfork() acts like fork(), except:
1. Any variables that are common to both parent and child, and are
changed by the child before it exits or execs, have undefined values in
the parent when its vfork() returns.
2. The child may not call unsafe standard functions (these are
nonreentrant; see Posix 1003.1-1988 section 3.3.1.3(3)(f)).
3. The child may not return from the function that called vfork(),
either explicitly or via longjmp().
4. The program must #include <vfork.h>.
(2) follows from (1). (4) is common practice, and gets around the exotic
architecture problem. (2)'s phrase ``common to both parent and child'' lets
the child call reentrant functions, because their automatic variables do not
exist in the parent.
I don't much like vfork(), but it's common practice, it is much faster on many
hosts, and many widely distributed Unix programs use it. By all means, let's
invent other primitives if they're needed, but why not first standardize the
primitives we already have?
Volume-Number: Volume 22, Number 96
More information about the Comp.std.unix
mailing list