Perl 管道挂起,进程失效

Perl pipe hangs and process becomes defunct

我有一个使用管道执行另一个脚本的 perl 脚本:

1
2
3
4
5
6
7
$pid = open (OUTPUT,"my_script.pl 2>&1 |") ||"";
if ($pid) {
  while (<OUTPUT>) {
    print;
  }
  close (OUTPUT);
}

my_script.pl fork 另一个子进程。当我第一次杀死 my_script.pl 然后杀死它的子进程(我使用 kill -9 手动杀死进程)时,my_script.pl 进程变为无效并且管道挂起。
知道如何解决这个问题吗?

我不想先杀死子进程。


当一个程序退出时,它会变成一个僵尸(已失效的进程),直到它的父进程(通过调用 wait)收割它。[1]如果进程完全消失,程序将无法获得子进程的退出代码。这是完全正常的,不是问题。

  • 孤儿(包括僵尸孤儿)被进程 1 收养,当他们完成时立即收割它的孩子。