我有一个perl脚本,该脚本使用管道执行另一个脚本:
$pid = open (OUTPUT, "my_script.pl 2>&1 |") || "";
if ($pid) {
while (<OUTPUT>) {
print;
}
close (OUTPUT);
}
my_script.pl
叉另一个子过程。当我第一次杀死my_script.pl
,然后杀死其子过程(我使用kill -9
手动杀死过程),然后my_script.pl
过程变为已删除,管道悬挂。知道如何解决这个问题吗?
我不想先杀死孩子的过程。
当程序退出时,它将变成僵尸(已删除的过程),直到其父收益为止(通过调用wait
)。 [1] 如果该过程完全消失了,程序将无法获得儿童流程的退出代码。这是完全正常的,而不是问题。
- 孤儿(包括僵尸孤儿)被过程1采用,这立即在孩子完成时收获。