プロセスを開始し、その出力を名前付きパイプにリダイレクトしています。with で名前付きパイプに再接続していcat > $pipe
ます。親プロセスの終了をポーリングせずにプロセスの stdout が終了したときに、名前付きパイプを終了するように設定するにはどうすればよいですか?
それ以外に、cat
名前付きパイプを開くために使用できるものは何ですか?
プロセスを開始し、その出力を名前付きパイプにリダイレクトしています。with で名前付きパイプに再接続していcat > $pipe
ます。親プロセスの終了をポーリングせずにプロセスの stdout が終了したときに、名前付きパイプを終了するように設定するにはどうすればよいですか?
それ以外に、cat
名前付きパイプを開くために使用できるものは何ですか?
fifoは常に読み取りと書き込みの準備ができているため、プログラムのようなプログラムは読み取りを停止cat
しtail -f
ません。確認したいのは、そのファイルに書き込むプロセスがあるかどうかです。そのようなプロセスがない場合は、読み取りを停止します。(ところで、ファイルを読み取るための最良の方法は、ファイルを読み取るread
ことです。)
lsof
指定されたファイルとの間で誰が読み書きするかを知ることができます。そのマニュアルページを見て、次のようなことを試してください。
while lsof /path/to/fifo
do
read -r line < /path/to/fifo
printf "%s\n" "$line"
done
わからないので、lsofを調べて、そのファイルに書き込むプロセスのみを出力するオプションを見つける時間がありません。マニュアルページでそれを調べてください。
したがって、FIFOに書き込むプロセスがある限り、このスクリプトは行を読み取り、それを出力します。ファイルに書き込むプロセスがなくなると、ループが中断され、スクリプトが終了します。
を使用する以外にファイルに書き込むプロセスがあるかどうかを確認する別の方法がわかりませんlsof
。もっと標準的な方法を知っている人がいたら、私も知りたいです。
cat > $pipe
パイプから読み取るのではなく、パイプに書き込みます。
パイプからデータを読み取り、ターミナルに印刷する場合は、を試してくださいtail -f $pipe
。
この-f
オプションはtail
実行を継続し、新しいデータがパイプに書き込まれたときに出力を出力します。
LinuxJournalのこの記事も参照してください。