単純なパイプラインがあるとしましょう。
set -eo pipefail;
echo 'foo' | cat
cat
いつやめるべきかはどうすればわかりますか? STDINストリームの終わりですか?それともcat
信号が受信されたときですか?私の例では、プロデューサープロセスはSIGINTを受け取り、コード1で終了しました。では、(消費者プロセス)は、cat
生産者プロセスがどの終了コードで終了したかをどうやって知ることができますか?
答え1
cat
知らないという兆候echo
。各ファイル終了条件を受け取ります。人的管理(7):
パイプの書き込みの終わりを参照するすべてのファイル記述子が閉じられている場合、パイプがread(2)を試みるとファイルの終わりが表示されます(read(2)は0を返します)。
しかし、パイプ作成者にはSIGPIPEがあります。同じマニュアルページを参照してください