木村です。

	In: [ruby-list:4243] 

>:なるほど,そういうことでしたか.では,MS系のOSではpclose()を
>:呼ぶようにしようと思います.となるとatexit()を使った方が楽そ
>:うですが,atexit()で構いませんか.OSによってはat_exit()だっ
>:たりするようですが.
>
>今のところ popen/pclose を使っているのは djgpp, mswin32 だけ
>なので, ANSI の atexit() でたぶん大丈夫だと思うけど, このあ
>たりは木村さんがまとめてるはずなんで待ちます.
>
>#先走りすぎたか.

えっとまず、状況について説明します。

PORT = open("|nl", "w")
PORT.print "abc\n"
PORT.print "def\n"
PORT.close

というスクリプトを実行した場合、最後の行のcloseがないと、
djgpp版では何も出力されず、mswin32版ではnlのプロセスが裏で生き延
びるという事態になってしまいます。したがって、ユーザーがcloseし
なかった場合になんらかの後始末が必要だというわけです。
#また undocumentedな動作に振り回された…^^;;

幸か不幸かmswin32版の場合、これらはnt.cにあるmypopenでやってます
のでcloseで始末すべきプロセスのIDはわかります(open時に幾つかの情
報を自前のテーブルに登録している)ので、自前でケリを付ける関数を
作ってそれをatexitで登録しようかと思ってたのですが、関数の作成に
はまだ手を付けてませんでした^^;

プロセスの後始末ができるということがポイントなので、方針としては
atexit()で進めていただいてかまいませんです。

ところでまつもとさんのメイルにあった

	In [ruby-list:4244] 

>  * popenを使っている実装では終了時にpcloseを呼ぶ

これは、rubyインタープリターがpcloseを呼んでくれる。という
ことですか?
#なんとなくそう読めてしまうので…

-- 
木村浩一
    e-mail koichi-ki / aix.or.jp
           kkimura / pure.cpdc.canon.co.jp