2011-01-24 37 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