【发布时间】:2014-06-02 23:09:12
【问题描述】:
我制作了 bash 脚本,它调用了两个通过命名管道链接的进程,如下所示:
mkfifo pipe
gnuplot <pipe &
PIPE=pipe apl $*
rm pipe
wait $!
这里apl 通过pipe 向gnuplot 发送命令。当第一个完成时,第二个也应该完成,然后脚本终止。
(注意,问题与apl 和gnuplot 都不相关,您可以想象任何其他应用程序。
问题是apl 可能会也可能不会打开管道(如果它不需要绘制任何图表)。如果它不打开管道 gnuplot 将永远等待,因此脚本不会终止。
如果我尝试使用 echo 'exit' >pipe 终止 gnuplot,它会在相反的情况下挂起。
如果我只是删除wait,gnuplot 将永远在后台等待。
我不能强制apl 打开和关闭管道(它由操作员控制,可能会忘记这样做)。
那么脚本和后台进程应该如何终止呢?
【问题讨论】:
标签: bash pipe named-pipes terminate