was originally used to create new processes without fully copying the address
space of the old process, which is horrendously inefficient in a paged
It was useful when the purpose of
would have been to create a new system context for an
is now efficient, even in the above case, the need for
in that the parent is suspended until the child makes a call to
or an exit (either by a call to
In addition, fork handlers established using
are not called when a multithreaded program calls
returns 0 in the child's context and (later) the PID of the child in
the parent's context.
To avoid a possible deadlock situation, processes that are children
in the middle of a
are never sent
signals; rather, output or
calls are allowed and input attempts result in an end-of-file indication.