[ruby-list:49605] Re: IO.popen に不具合?

From: 尾川敏也 <ogw@...>
Date: 2013-09-26 11:58:38 UTC
List: ruby-list #49605
尾川です。

コメントありがとうございます。

田中さん wrote:
> > [B] で join してみる意味はありますでしょうか?
> 書いたように、もしスレッドの中で例外が発生していれば、意味はあるんじゃないでしょうか。

試してみました。

  def |(cmdline)
    IO.popen(cmdline, "w+") do |pipe|
      t = Thread.fork {
        pipe.write self
        pipe.close_write
      }
      result = pipe.read
      t.join              # [B] ここで待ち合わせ
      result
    end
  end

結果は何も変わらず、以前と同じように繰り返し実行すると時折エラーに
なり、エラーになった時も Ruby から特別なメッセージの類が表示される
ことはありませんでした。

スレッドのことはあまり判っていないのですが、ハチドリ本の中のスレッ
ドと例外のところを見ていたら、abort_on_exception というインスタンス
変数のことが載っていたので、これも試してみました。

上記の [B] のところを t.join の代わりに

        t.abort_on_exception = true

と書き換えてみましたが、やはり何も変わらず、時折気まぐれにエラーに
なり、その時も Ruby からのメッセージの類は無し、でした。

スレッドの中で例外が起きているというわけでは無い、ということなのか
と思います。

-- 
尾川敏也 ogw@shizuokanet.ne.jp
http://www6.shizuokanet.ne.jp/ogw/

In This Thread