KDOC 284: パイプで結合したプロセスが終了する流れ
この文書のステータス
- 作成
- 2024-11-10 貴島
- レビュー
- 2024-11-14 貴島
概要
cat /dev/random | head
- cat と head が非同期で実行開始する
- catがパイプのバッファにランダムなバイト列を書き込む
- headがパイプのバッファに書き込まれた内容を読み取る。入力のうち先頭10行を読み込み、実行終了する
- head終了に伴って読み込み側のファイルディスクリプタがクローズされる
- catはまだ動いている
- catがパイプバッファへ書き込みしようとすると、読み込み側のファイルディスクリプタがクローズされているので書き込みがブロックされる。OSからcatのプロセスにSIGPIPEが送られる
- catプロセスはSIGPIPEによって終了させられる。終了コード141を返す。SIGPIPEによって終了したことを示すコード
関連
- KDOC 282: パイプで結合すると実行終了するのはなぜか?。メモを書くきっかけとなった問い
- KDOC 283: パイプはファイルディスクリプタがクローズされると終了する。マニュアルの該当箇所