Jeroen Lodewijks wrote:
>
> Basically, I want to spawn a process which does something (call a
> subroutine)
> The main process should just continue pumping data which is spawned up to
> 10 processes.
> Else it should wait until 1 of the 10 processes finishes.
>
> Any code examples out there??
>
> PS The target machine is a Unix box.
>
here is a simple code example that does what you describe. it creates a
total of 10 childs in 2 separate creation. each creation allow a max of 5
childs to run at once. once there are 5 child processes, the parent waits
for the child processes to die and then start another 5 processes:
#!/usr/bin/perl -w
use strict;
use POSIX;
my $child = 0;
$SIG{CHLD} = sub
{ while((my $c=waitpid(-1,&POSIX::WNOHANG)) > 0){$child--} };
sub process_handler{
my $num = shift;
my $pid = fork;
die("fork failed\n") unless(defined $pid);
if($pid){
print "$child child ($pid $num)\n";
return 1;
}
#--
#-- replace the following with what your child
#-- process really has to do
#--
sleep(1) for(1..5);
exit;
}
for(my $i=0; $i<10; $i++){
process_handler($i);
$child++;
while($child == 5){
print "already 5 child. wait for them\n";
sleep(1);
}
#--
#-- parent process pump the data
#--
}
__END__
prints:
0 child (29068 0)
1 child (29069 1)
2 child (29070 2)
3 child (29071 3)
4 child (29072 4)
already 5 child. wait for them
already 5 child. wait for them
already 5 child. wait for them
already 5 child. wait for them
already 5 child. wait for them
already 5 child. wait for them
2 child (29073 5)
3 child (29074 6)
4 child (29075 7)
... etc
the output shows that each creation only allows 5 child processes to run.
once this number is reached, the parent sleeps until some child has died
and then start forking again.
david
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]