At a fork(), we get two almost identical copies of the same process.
Everything gets copied (well, virtually anyway - the OS might use a
'copy-on-write technique), program, data, program counter, attributes,
with a small set of differences. Included in the differences are:
- fork() returns the process id of the child in the parent,
and it returns 0 in the child.
- The child gets a new process id (which is returned by fork()
in the parent) - the parent keeps the id.
- The parent keeps the 'ppid' - the ppid of the child equals
the pid of the parent.
- Filelocks are not inherited by the children.
- Pending signals (including alarm) are not inherited.
Stevens has a full list.
Note that if fork() would start the child at the beginning of the
program, something like:
perl -e 'fork'
would never end.
Abigail