我在获取子进程的退出状态时遇到一些问题。出于某种原因,kill 0,$pid的方式似乎不起作用。我在Unix机器上运行以下脚本:
for ( my $count = 1; $count <= 2; $count++) {
my $pid = fork();
if ($pid) {
# parent
push(@childs, $pid);
} elsif ($pid == 0) {
# child
sleep(10);
exit 0;
} else {
die "couldnt fork: $!n";
}
}
foreach (@childs) {
if (kill 0, $_){
print "$_ is running...n";
}
else {
print "$_ is completen";
}
}
sleep (20);
foreach (@childs) {
if (kill 0, $_){
print "$_ is running...n";
}
else {
print "$_ is completen";
}
}
我得到的指纹是:
23285正在运行
23286正在运行
23285正在运行
23286正在运行。。。
有人能解释一下为什么这不起作用吗,并可能提出解决方案或变通方法吗
非常感谢!
每当我需要派生一个子代并等待它时,我都会使用wait()函数。
当我必须派生多个子代并等待它们时,我使用Parallel::ForkManager模块。