bashのソース(subst.c)読んだ。自分用まとめ。

・ <(hoge) が出てくると、mkfifoしてforkする。
・ 親シェルはそのfifoと子シェルpidをひもづける。
・ 子シェルはそのfifoをwrite openする。
・ fifoのwrite openは、readするプロセスがいなければブロックされる。
・ だから : <(hoge) だと、hogeは起動されず、子シェル状態のまま。
・ readするプロセスが現われたら、openが成功し、dup2してstdoutにつなぐ。
・ parse_and_executeを呼んで中でforkしてhogeを実行する。
・ hogeが終わったら子シェルは死ぬ。
・ 親シェルは定期的(コマンド起動のタイミングとか)にfifoにひもづけられた子シェルの状況を調べて、死んでたらfifoをunlinkする。