消費者を閉じる正しい方法

消費者を閉じる正しい方法

単純なパイプラインがあるとしましょう。

set -eo pipefail;
echo 'foo' | cat

catいつやめるべきかはどうすればわかりますか? STDINストリームの終わりですか?それともcat信号が受信されたときですか?私の例では、プロデューサープロセスはSIGINTを受け取り、コード1で終了しました。では、(消費者プロセス)は、cat生産者プロセスがどの終了コードで終了したかをどうやって知ることができますか?

答え1

cat知らないという兆候echo。各ファイル終了条件を受け取ります。人的管理(7):

パイプの書き込みの終わりを参照するすべてのファイル記述子が閉じられている場合、パイプがread(2)を試みるとファイルの終わりが表示されます(read(2)は0を返します)。

しかし、パイプ作成者にはSIGPIPEがあります。同じマニュアルページを参照してください

関連情報