2011-01-24 108 views
0

我有两个脚本,一个将几个文件名作为输入并将数据写入管道(真正将管道作为参数传递给我写的程序)。然后另一个用一些命名管道调用第一个脚本作为输入,然后调用一些其他程序来处理来自管道的数据。等待命名管道在BASH中以下标打开?

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

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

+0

是否让读者停滞不前?你只是在一个方向上使用管道(这样就没有死锁)?看起来管道已经在自己想做同步了。 – 2011-01-24 17:21:59

回答

0

我不认为这是你的问题。

如果生产者晚于消费者启动,没什么大不了的。

实施例:

窗口1

$ mkfifo foo.pipe 
$ cat foo.pipe 
(hangs) 

窗口2

$ echo 'something' > foo.pipe 

窗口1

something 
(exits) 

也许你的问题是,一个过程是耗时的输出F ifo,然后制片人退出,然后你试图再次从fifo读取。

在这种情况下,它会无限期地挂起。

例如上述序列后:

窗口1

$ cat foo.pipe 

挂起,直到您运行另一个echo something > foo.pipe