sub do_something {
while(1) {
#see if $brcmd has finished here
# if ($BR finished) ?
sleep 1;
}
}
open $BR, q{-|}, $brcmd
or die 'Cannot open BR';
do_something();
my $err = !(close $BR)
在上面的代码中,我是开放$brcmd
,它做了很长时间
在do_something()
内,我希望能够检查$brcmd
是否已完成
有什么建议吗?
答案 0 :(得分:2)
它只是长期存在的东西(我曾经从中读过但不再需要)。我只是想知道它是否已经完成。
我需要在运行时完全做其他事情但是当它完成时我需要退出。所以我需要能够轮询它是否完成而没有捕获它。
如果这些是你的要求,你应该保存孩子的pid(open
的返回值),然后,当父母完成时,waitpid关于孩子。
perldoc -f open实际上有一个例子:
my $child_pid = open(my $from_kid, "-|") // die "Can't fork: $!";
# ...
if ($child_pid) {
# am the parent:
# either write $to_kid or else read $from_kid
...
waitpid $child_pid, 0;
} else {
# am the child; use STDIN/STDOUT normally
...
exit;
}
答案 1 :(得分:0)
你没有提供关于$brcmd
可能是什么的任何提示,但是既然你已经从中打开了一个管道,我建议你从那个管道中读取并等待文件结束
也许是这样的事情?
open my $br_fh, '-|', $brcmd or die "Cannot open BR command: $!";
my @output = <$br_fh>;