我有两个脚本,一个将几个文件名作为输入并将数据写入管道(实际上将管道传递给我编写的程序的参数)。然后另一个调用第一个脚本,将一些命名管道作为输入,然后调用其他一些程序来处理来自管道的数据。
我的问题是我的管道停滞不前,我认为正在发生的是第一个bash脚本在后台从第二个脚本调用,然后继续立即启动消费者进程,所以我认为读者是在作者(在下标中)之前打开,这可能导致失速?
有没有办法在命名管道上同步并等待它在bash中打开?
答案 0 :(得分:0)
我认为这不是你的问题。
如果制片人的开场时间晚于消费者,那就没什么大不了的了。
示例:
窗口1
$ mkfifo foo.pipe
$ cat foo.pipe
(hangs)
Window 2
$ echo 'something' > foo.pipe
窗口1
something
(exits)
也许你的问题是一个进程正在消耗fifo的输出,然后生产者退出,然后你试图再次从fifo读取。
在这种情况下,它会无限期地挂起。
e.g。在上面的序列之后:
窗口1
$ cat foo.pipe
挂起,直到您再次运行echo something > foo.pipe
。