From: "とみたまさひろ" Date: 2007-01-24T23:42:02+09:00 Subject: [ruby-dev:30181] Open3.popen3 の終了処理 とみたです。 Open3.popen3 がコマンドの exec に失敗した場合に、通常の終了処理を行なっ てしまい、at_exit 等が実行されてしまいます。 % ruby -ropen3 -e 'at_exit{p $$}; Open3.popen3("/bin/hogehoge"){|i,o,e| puts o.read}' 30583 ← 子(孫?)プロセスの出力 30581 簡単にパッチを作ってみました。 # エラーメッセージの形式が変わってしまいますけど…。 --- open3.rb.orig 2006-08-05 07:00:21.000000000 +0900 +++ open3.rb 2007-01-24 23:13:42.000000000 +0900 @@ -45,7 +45,12 @@ STDERR.reopen(pe[1]) pe[1].close - exec(*cmd) + begin + exec(*cmd) + rescue Exception => e + STDERR.puts e.inspect + exit!(1) + end } exit!(0) } -- とみたまさひろ 『Postfix辞典』ISBN:4798110353 3469 42CC 4D32 F53C AD98 65A5 8C37 FF09 69C1 6040