in reply to Question on how fork works.

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