是否有简单可靠的方法来判断IPC::Run
任务何时完成,即任何子进程已退出?如何判断IPC :: Run作业何时完成
这篇文档令人惊讶的沉默。
看来循环上pumpable
作品,虽然它不是真正明确记载为正确的方式做的事情:
use strict;
use warnings;
use IPC::Run;
use 5.12.0;
my $handle = IPC::Run::start(['sleep', '10']);
while ($handle->pumpable)
{
sleep(0.5);
# do other stuff in the event loop
# so we don't want to block on finish
}
$handle->finish;
print("exited with '" . $handle->result . "'");
是否还有更好的选择吗? finish
块,但是当您等待proc完成时,您无法在事件循环中执行其他工作。
我很惊讶,没有一个简单的
$handle->running
或
$handle->finished
我失去了一些东西明显?
同样,似乎没有记录的方式来获得孩子(ren)的pid。
'$ handle-> finish'块,比如'wait'。如果你想在等待之前检查,调用'result' _before_ child显然抛出一个异常,所以你可以通过检查异常--eval {$ res = $ handle-> result}来使用它,或者打印“Still running \ n“个;'。这是一个kludge(应该检查'$ @'而不是'或' - 它),但这样做吗?还有一些其他版本的结果。还有一个'信号',我试图发送一个'0',但我什么都没有回来。文档中似乎暗示pid不能直接使用。 – zdim
呃。是的,可以尝试调用'result'并捕获异常。丑陋:(我应该明确表示我正在寻找一种非阻塞方式,否则我只是使用'IPC :: Run :: run'。谢谢。 –
对,我确实得到了,但提到了以防万一,这是丑陋的,但我现在看不到更清洁的方式(我没有太多使用这个模块,我会看起来更多,因为我一直想更好地检查它。) – zdim