早瀬@阪大です。

ruby というより、 C の stdio の話ですね。

> しかし,
>   % ruby exit?.rb | less
> などとしてパイプに渡すと, exit! を用いた exit2.rb は
> 後続のプロセスに "hoge\n" が渡って来ないようです.

ストリームが端末に結びつけられている場合には、 line buffered モードとな
り、改行文字を書く毎にバッファが flush されます。端末以外の場合は、
fully buffered モードになり、バッファがいっぱいになるまでは、自動的には
flush されません。

バッファモードの設定は、 setvbuf で行います。Ruby 1.6 のドキュメントを見
た限りでは、 line buffered モードに対応するメソッド等は無いように思えま
す。

-- 
早瀬 康裕
大阪大学大学院情報科学研究科コンピュータサイエンス専攻博士前期課程1年
ソフトウェア工学講座 (井上研究室)