Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ vfork(2) — svr4 — mips UMIPS RISC/os 5.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

exit(2)

fork(2)

ioctl(2)

wait(2)



VFORK(2-SVR4)       RISC/os Reference Manual        VFORK(2-SVR4)



NAME
     vfork - spawn new process in a virtual memory efficient way

SYNOPSIS
     #include <unistd.h>

     pidt vfork (void);

DESCRIPTION
     vfork can be used to create new processes without fully
     copying the address space of the old process, which is
     horrendously inefficient in a paged environment.  It is use-
     ful when the purpose of fork(2) would have been to create a
     new system context for an execve.  vfork differs from fork
     in that the child borrows the parent's memory and thread of
     control until a call to execve or an exit (either by a call
     to exit or abnormally.)  The parent process is suspended
     while the child is using its resources.

     vfork returns 0 in the child's context and (later) the pro-
     cess ID (PID) of the child in the parent's context.

     vfork can normally be used just like fork.  It does not
     work, however, to return while running in the child's con-
     text from the procedure which called vfork since the even-
     tual return from vfork would then return to a no longer
     existent stack frame.  Be careful, also, to call _exit
     rather than exit if you cannot execve, since exit will flush
     and close standard I/O channels, and thereby mess up the
     parent processes standard I/O data structures.  Even with
     fork it is wrong to call exit since buffered data would then
     be flushed twice.

DIAGNOSTICS
     Upon successful completion, vfork returns a value of 0 to
     the child process and returns the process ID of the child
     process to the parent process.  Otherwise, a value of -1 is
     returned to the parent process, no child process is created,
     and the global variable errno is set to indicate the error.

     vfork will fail and no child process will be created if one
     or more of the following are true:

     EAGAIN         The system-imposed limit on the total number
                    of processes under execution would be
                    exceeded.  This limit is determined when the
                    system is generated.

     EAGAIN         The system-imposed limit on the total number
                    of processes under execution by a single user
                    would be exceeded.  This limit is determined
                    when the system is generated.



                        Printed 11/19/92                   Page 1





VFORK(2-SVR4)       RISC/os Reference Manual        VFORK(2-SVR4)



     ENOMEM         There is insufficient swap space for the new
                    process.

SEE ALSO
     exec(2), exit(2), fork(2), ioctl(2), wait(2).

NOTES
     This system call will be eliminated in a future release.
     System implementation changes are making the efficiency gain
     of vfork over fork smaller.  The memory sharing semantics of
     vfork can be obtained through other mechanisms.

     To avoid a possible deadlock situation, processes that are
     children in the middle of a vfork are never sent SIGTTOU or
     SIGTTIN signals; rather, output or ioctls are allowed and
     input attempts result in an EOF indication.

     On some systems, the implementation of vfork causes the
     parent to inherit register values from the child.  This can
     create problems for certain optimizing compilers if
     <unistd.h> is not included in the source calling vfork.


































 Page 2                 Printed 11/19/92



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026