Michael said:
David Masover wrote:
on the line
if (pid = fork)
Is fork returning the pid of the spawned process or of the current (e.g.
parent) process?
It's returning the pid of the spawned process in the parent process, and
nil in the spawned process. So in the code above, the 'if' clause is in
the parent process, and the 'else' clause is in the spawned process.
More to the point, assume that I spawn multiple
processes. How can I address each of them?
With multiple pids. Following my pattern above, you'd do:
if pid1 = fork
if pid2 = fork
# parent process
else
# inside pid2
end
else
# inside pid1
end
You could also create arbitrary process trees:
if child = fork
# parent process
elsif grandchild = fork
# child process
else
# grandchild process
end
Now, Louise-Philippe has some more elegant syntax, where you can pass a
block that will be executed in the spawned process. But the idea is the
same. Also worth noting, my examples above are the same relatively
low-level concept used everywhere else on Unix.
So, translating my example above:
child = fork do
grandchild = fork do
# grandchild process
end
# child process
end
# parent process