Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl管道挂起,进程失效_Perl_Pipe - Fatal编程技术网

Perl管道挂起,进程失效

Perl管道挂起,进程失效,perl,pipe,Perl,Pipe,我有一个perl脚本,它使用管道执行另一个脚本: $pid = open (OUTPUT, "my_script.pl 2>&1 |") || ""; if ($pid) { while (<OUTPUT>) { print; } close (OUTPUT); } $pid=open(输出,“my_script.pl 2>&1|”)||; 如果($pid){ 而(){ 印刷品; } 关闭(输出); } my_script.pl派生另一个子进程。

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

$pid = open (OUTPUT, "my_script.pl 2>&1 |") || "";
if ($pid) {
  while (<OUTPUT>) {
    print;
  }
  close (OUTPUT);
}
$pid=open(输出,“my_script.pl 2>&1|”)||;
如果($pid){
而(){
印刷品;
}
关闭(输出);
}
my_script.pl
派生另一个子进程。当我第一次杀死
my_script.pl
然后杀死它的子进程时(我使用
kill-9
手动杀死这些进程),然后
my_script.pl
进程将失效,管道挂起。 你知道如何解决这个问题吗


我不想先杀死子进程。

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

  • 孤儿(包括僵尸孤儿)被进程1收养,进程1在其子进程完成后立即收获它们

  • 您是否希望
    my_script.pl
    即使您
    kill-9 parent_script.pl
    也继续运行?我希望在所有子脚本被kill时父脚本关闭管道。。。但问题是,我的_script.pl已经失效了——我不知道什么时候会发生什么。您能否添加一个列表/树,列出哪个进程启动哪个其他进程,然后告诉我们哪个进程何时被终止?我猜您希望将所有进程移动到一个进程组中,以便它们一起被终止,但我还不理解您的问题。如果“管道挂起”,则某些进程仍然打开管道的写入端。发布
    my_script.pl
    可能产生的所有进程的进程树。至少其中一个仍在运行。您希望能够执行什么操作?要在脚本运行时从命令行手动杀死
    my_script.pl
    ?这是“粗鲁”的,你应该预料到它可能不会干净地工作,正是因为
    my_script.pl
    可能被某种东西束缚住了;因此,向它添加一个信号处理程序,您可以在其中根据需要清理/关闭资源。如果这不是你想要的,你能说出你的目标吗?