【发布时间】:2019-06-26 09:52:28
【问题描述】:
我有一个 perl6 程序,它通过Proc::Async 运行一个外部程序并尝试读取它的stdout。应该读取标准输出的代码部分可能会以某种方式失败,但程序的其他部分实际上会杀死外部进程以清理内容。但是,在杀死这样的进程之后,然后等待承诺,它会永远阻塞......,我怎样才能避免 perl6 阻塞等待被杀死的 Proc::Async 其 stdout 被管道但未被消耗?我认为以下 sn-p 说明了问题:
#!/usr/bin/env perl6
#
my $proc = Proc::Async.new(<cat /dev/urandom>);
my $supply = $proc.stdout(:bin);
my $promise = $proc.start;
$proc.ready.then: {
shell <<ps auxf | grep [u]random>>;
put "Terminating process {$_.result} …";
$proc.kill(SIGTERM);
}
sleep 1;
if shell(<<ps auxf | grep [u]random>>).exitcode ≠ 0 {
put "processed killed!";
}
put "awaiting $proc ({$proc.command}) …";
await $promise; # <--- blocked here :(
【问题讨论】:
标签: raku