Tyler Littlefield wrote: > I do have a question regarding that though. > If I were to write fork, I'd make it take a function to call when the process > is recreated. I have seen a bunch of examples of fork, but it looks like > after they fork it starts after the fork call? or how does that work.
To answer your question: fork() operates by copying the working set to a new pid. Actually, for performance-reasons, it supposedly doesn't actually copy anything but marks each memory block as a copy-on-write operation...but that is an implementation detail and hardware-specific. For all intents and purposes from the programmer's perspective, the entire process is copied byte for byte by the OS (in kernel mode). fork() then returns 0 for the child process and the pid for the parent process. The two processes are quite literally identical right up to that point (including things like open sockets, file descriptors, etc.). How fork() determines it is the child process vs. parent process is likely a comparison of the two process IDs/pointers/handles to what it thinks it is (based on a previous retrieval prior to the actual copy) or the kernel simply keeps track. One of the two. There is no need to have a callback function as the processes are identical and there is a way to differentiate between child and parent. -- Thomas Hruska CubicleSoft President Ph: 517-803-4197 *NEW* MyTaskFocus 1.1 Get on task. Stay on task. http://www.CubicleSoft.com/MyTaskFocus/