web-dev-qa-db-ja.com

消費者をシャットダウンする適切な方法

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

set -eo pipefail;
echo 'foo' | cat

catはいつ終了するかをどのようにして知るのですか? STDINストリームが終了したときですか、それともcatがシグナルを受信しますか?私の場合、プロデューサープロセスはSIGINTを受信し、コード1で終了します。プロデューサープロセスがどの終了コードで終了したかをcat(コンシューマープロセス)で知るにはどうすればよいですか。

4
Alexander Mills

catechoのシグナルを知りません。 man pipe(7) ごとにファイル終了条件を受け取ります。

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

ただし、パイプへの書き込みには、SIGPIPEがあります。同じmanページを参照してください

13