有没有办法简单地分叉到 ig 4 个线程并在 while 循环期间检查孩子的状态?我读过一些关于 SIGCHLD ( http://perldoc.perl.org/perlipc.html ) 的东西,但我不熟悉这些东西,也不知道如何使用它。顺便提一句。没有理由不使用 Parallel::ForkManager,我只是感兴趣......并尝试了这样的事情
use strict;
use warnings;
use POSIX qw/ WNOHANG /;
my @a = qw( 1 2 3 4 5 6 7 8 9 0 );
my @childs;
$#childs=4;
foreach my $a (@a){
my $add=0;
while(!$add){
$add=0;
foreach(0..$#childs){
next if defined $childs[$_] && $childs[$_]!=0;
$add=1;
my $pid=fork();
if ($pid == 0){
&process($a);
exit;
} else {
$childs[$_]=$pid;
waitpid($pid,WNOHANG);
}
}
}
}
sub process(){
my $x = shift;
sleep(int(rand(10)));
print $x."\n";
}