我有一个软件会在某个时候等待命名管道上的输出。这个动作是阻塞的,我想同时有一个加载图像。我正在考虑通过在 while 循环开始之前分叉该过程来实现这一点。
my $pid = fork()
if (defined($pid) and $pid == 0) {
show_animation();
exit 0;
}
while ($return_line = $FIFO->getline) {
# Process the output when it's ready
}
将show_animation()
检查正在编写输出的脚本是否仍在运行,并在它结束后立即结束。
不幸的是,这破坏了一切,因为分叉进程与主进程共享相同的套接字和其他所有内容。ZeroMQ似乎不喜欢这样(一旦进程被分叉,程序就会因 ZeroMQ 错误而中止)。
我一直在寻找像Proc::Spawn这样的模块,它可以让我在两个进程之间共享 STDOUT 通道。你有什么建议吗?你有没有更好的方法来实现这一点?