在BASH的下标中等待命名管道打开?

时间:2011-01-24 17:18:22

标签: bash pipe

我有两个脚本,一个将几个文件名作为输入并将数据写入管道(实际上将管道传递给我编写的程序的参数)。然后另一个调用第一个脚本,将一些命名管道作为输入,然后调用其他一些程序来处理来自管道的数据。

我的问题是我的管道停滞不前,我认为正在发生的是第一个bash脚本在后台从第二个脚本调用,然后继续立即启动消费者进程,所以我认为读者是在作者(在下标中)之前打开,这可能导致失速?

有没有办法在命名管道上同步并等待它在bash中打开?

1 个答案:

答案 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