From: "きた" Date: 2002-11-18T13:33:11+09:00 Subject: [ruby-list:36512] IOクラスのオブジェクトがGCされる際の挙動について こんにちは.きたと申します. 最近ふとしたことから IO クラスのオブジェクトが GC で回収される際の挙動 に疑問を持ったので質問させて下さい. # 以下は ruby 1.6.7 での話です.もし開発版の ruby で挙動が異なるようで # したらご指摘下さい. x = open("|ls hoge") x.read x.close とした場合は,open() で生成された pipe が close され,子プロセスもきち んと wait されるのに対し, x = open("|ls hoge") x.read x = nil GC.start のように,GC で回収させると pipe は close されますが,子プロセスは wait されないようです. これは私だけの感覚かもしれませんが,open() で生成されたオブジェクトに 付随するリソースは,そのオブジェクトが GC される際に開放されるべきでは ないかと思います. が,現在の ruby ではそのような実装になっていないようです. これは何か理由があるのでしょうか? # とここまで書いて気付いたのですが,FAQ や 落とし穴に書いてあるように, # ちゃんと close するなり IO.foreach や IO.readlines を使うのがスジな # んでしょうねぇ. # なお,このような質問をさせてもらった経緯は # http://kitaj.no-ip.com/tdiary/20021117.html#p05 # http://kitaj.no-ip.com/tdiary/20021118.html#p10 # あたりに書いてますので,興味がおありの方はご覧下さい.