From: Tanaka Akira Date: 2012-11-10T23:32:12+09:00 Subject: [ruby-dev:46475] Re: トラップハンドラで許されない操作はなにか 2012年11月9日 10:08 Tomoyuki Chikanaga : > 子プロセスの終了を SIGCHLD で検出するために、トラップハンドラ内でロックが使えないので pipe > を使ってトラップハンドラで書込み、監視するスレッドで IO.select > で待って読むというのをやったことがあります。ロックも使えないしIOもできないとなると、変数に代入して監視するほうは polling > で検出するしかなくなり、その場合シグナルの喪失がありえると思います。 この the pipe trick のためにトラップハンドラで IO を許すというのは、 IO をすべて使えるようにしなければならないという話ではないように思います。 pipe の大きさは有限であり、いっぱいになると書けない (でも書けないときはなんらかのデータが pipe に入っているため、 select は readable になるので書けなくても問題ない) ので、 write_nonblock だけでいいんじゃないでしょうか。 -- [田中 哲][たなか あきら][Tanaka Akira]