在Perl中检查子进程状态

时间:2013-07-15 12:22:06

标签: perl parent-child

我在获取子进程的退出状态时遇到了一些麻烦。出于某种原因,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 complete\n";
}

}

sleep (20);
foreach (@childs) {
if (kill 0, $_){
    print "$_ is running...\n";
}
else {
    print "$_ is complete\n";
}

}

我得到的照片是:
23285正在运行...
23286正在运行...
23285正在运行...
23286正在运行......

任何人都可以解释为什么这不起作用,并建议解决方案或解决方法? 非常感谢!

1 个答案:

答案 0 :(得分:0)

每当我需要分叉一个孩子并等待它时,我使用wait()函数。

当我必须分叉多个孩子并等待它们时,我使用Parallel::ForkManager模块。