パイプ
二つのプロセスの間をつなぐ一方向のバイトストリーム。シェルの|を可能にしている仕組みだ。
カーネルがバッファを用意し、一方のプロセスには書き込み用、もう一方には読み取り用のファイルディスクリプタを渡す。バッファが満杯なら書き手が、空なら読み手がブロックされるので、フロー制御が自然に手に入る。Linuxのバッファは通常64 kBである。
「一つのことをうまくやる小さなプログラムを、テキストストリームでつなぐ」というUnix哲学を支えるのがこの仕組みだ。mkfifoで作る名前付きパイプはファイルシステム上に存在し、無関係なプロセス同士をつなげる。よく遭遇するのがSIGPIPEで、読み手がいなくなったパイプに書き込むと、既定ではプロセスが終了する。headが出力の多いコマンドを黙らせられるのは、このためである。