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