Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/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 terminate命令_Perl_Command - Fatal编程技术网

句柄关闭时的Perl terminate命令

句柄关闭时的Perl terminate命令,perl,command,Perl,Command,我有以下代码,它读取命令“some_command”的输出。“some_命令”是一个持续的过程,它会一直打印输出,直到输出被终止。我想知道如果我关闭文件句柄或调用last,它是否也会终止“some_命令”进程,或者“some_命令”可能会继续作为孤立进程运行。我基本上希望读取命令的输出,直到找到带有/output/的行,然后终止 my $mycommand = 'some_command'; open IN, "$mycommand 123456 |" or die("Failed: $!");

我有以下代码,它读取命令“some_command”的输出。“some_命令”是一个持续的过程,它会一直打印输出,直到输出被终止。我想知道如果我关闭文件句柄或调用last,它是否也会终止“some_命令”进程,或者“some_命令”可能会继续作为孤立进程运行。我基本上希望读取命令的输出,直到找到带有/output/的行,然后终止

my $mycommand = 'some_command';
open IN, "$mycommand 123456 |" or die("Failed: $!");
while(my $line = <IN> && !$stop) {
    if($line =~ /Output/) {
       # work is done
       last;
       $stop = 1;
    }
}
close IN;  
my$mycommand='some_命令';
在“$mycommand 123456 |”中打开或死亡(“失败:$!”;
while(我的$line=&&!$stop){
如果($line=~/Output/){
#工作完成了
最后;
$stop=1;
}
}
接近;

close
在这种类型的句柄上,首先关闭管道,然后等待子进程退出。下一次尝试写入SIGPIPE时,孩子将死于SIGPIPE。如果你不想等那么久,你可以加快速度,自己结束

my $pid = open ...;
while (<IN>) {
    if (/Output/) {
       # work is done
       kill TERM => $pid;
       last;
    }

    print;  # Or whatever
}

close IN;
my$pid=open。。。;
而(){
如果(/Output/){
#工作完成了
kill TERM=>$pid;
最后;
}
打印;#或任何东西
}
接近;

(因为您没有使用它,所以去掉了
$stop

在您上面提供的示例中,我不必调用close-In?@user1540909,我不是有意省略它。如果你不明确地关闭它,它将在退出时关闭。虽然。。。如果您使用一个包变量(就像您现在这样)而不是词法变量,那么Perl中的wontfix错误会使它成为Perl不等待子项的错误。