2011-01-24 13 views
0

私は2つのスクリプトを用意しています.1つはカップルのファイル名を入力として取り、データをパイプに書き込みます(実際にはプログラムの引数としてパイプを渡します)。そして、もう一方は、名前付きパイプを入力として最初のスクリプトを呼び出し、パイプからデータを処理するための他のプログラムを呼び出します。名前付きパイプがBASHの下付き文字で開くのを待っていますか?

私の問題は、私のパイプがストールしていると私が思うことは、最初のbashスクリプトが2番目のスクリプトからバックグラウンドで呼び出され、消費者プロセスをすぐに開始することです。 (下付き文字で)作者の前に開かれているので、ストールを引き起こす可能性がありますか?

名前付きパイプで同期させてbashで開くのを待つ方法はありますか?

+0

読者に問題が起きていませんか?一方向(デッドロックがないように)のパイプを使用していますか?パイプが既にあなた自身が望む同期を行っているようです。 –

+0

私の理解では、名前付きパイプが正しく動作するためには、読み込み終了前に書き込み終了を開く必要があります。これは間違っていますか?私の問題は、物事が停滞していて、決して一時的なストールだけではなく、始めに行くことではないということです。 –

答えて

0

私はあなたの問題だとは思わない。

プロデューサーが消費者より後で開始する場合、大きな問題はありません。

例:1

something 
(exits) 

ウィンドウ1

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

ウィンドウ2

$ echo 'something' > foo.pipe 

ウィンドウはおそらく、あなたの問題は、一つのプロセスがの出力を消費しているということですf ifo、プロデューサーが終了すると、あなたは再びfifoから読み込もうとしています。

この場合、無期限にハングします。

上記のシーケンスの後:あなたは別のecho something > foo.pipeを実行するまで

ウィンドウ1

$ cat foo.pipe 

ハングアップします。

関連する問題