in reply to help with Parallel:ForkManager

It will block in start until a child ends.

By the way,

for my $command (@commands) { $manager->start and next; ... system( $command ); $manager->finish; }
is better written as
for my $command (@commands) { $manager->start and next; ... exec( $command ); $manager->finish; }

since all finish does is end the process.

Replies are listed 'Best First'.
Re^2: help with Parallel:ForkManager
by arthurs (Novice) on Jan 12, 2010 at 15:13 UTC
    Thanks ikegami, but I am still not clear. If instead of using ForkManager module, I call fork once, it would make 2 processes running (a parent and a child) and I would need to check pid to know if I am in the parent or in a child. Now, if I use ForkManager and set # of processes to 20, and do 'start and next' the FIRST time in the loop, do I have 2 processes at this moment -- a parent and a child? If yes, then since I am not checking which process I am in, how does it know that a parent need to process $command[0] and the child need to take care of the next $command1 (or vise versa)? Thanks much.

      then since I am not checking which process I am in

      But you are. start and next; is the same as next if start;

        You are a man of few words! Let me see if I understand this correctly. When I do '$pm->start and next', it forks a child which takes the first argument of the @command array and starts executing. At the same time, without waiting for the 1st child to finish, it forks another child that processes the 2nd argument of the array and so on, until 20 children are running in parallel. If 20 children already running, but there are still unprocessed elements in the array, it would wait until a child would finish and fork another child. The array is processed by children only, the parent doesn't go through the array. Is that about right? Thanks much.