木村です。 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