単純なパイプラインがあるとします。
set -eo pipefail;
echo 'foo' | cat
cat
はいつ終了するかをどのようにして知るのですか? STDINストリームが終了したときですか、それともcat
がシグナルを受信しますか?私の場合、プロデューサープロセスはSIGINTを受信し、コード1で終了します。プロデューサープロセスがどの終了コードで終了したかをcat
(コンシューマープロセス)で知るにはどうすればよいですか。
cat
はecho
のシグナルを知りません。 man pipe(7) ごとにファイル終了条件を受け取ります。
パイプの書き込み終了を参照するすべてのファイル記述子が閉じている場合、パイプからread(2)を実行しようとすると、ファイルの終わりが表示されます(read(2)は0を返します)。
ただし、パイプへの書き込みには、SIGPIPEがあります。同じmanページを参照してください