From: "K.Kosako" Date: 2001-01-19T16:58:22+09:00 Subject: [ruby-list:27241] Re: Thread.new { sleep } TAKEUCHI Hidekiさんの<200101190714.QAA19344@deirdre.krc.sony.co.jp>から > a = Thread.new { sleep } > trap("SIGINT") { a.kill } > a.join > > このプログラムを実行すると割り込みをかけなくても > > deadlock 0x40125b94: 2:4 - xxx.rb:1 > deadlock 0x4012e5a0: 2:8 (main) - xxx.rb:3 > xxx.rb:3:in `join': Thread: deadlock (fatal) > from xxx.rb:3 > > このメッセージを出力してプログラムが終了します。 > このプログラムは(割り込みをかけなれば)止まらないと思うのですが > 私がなにか仕様の勘違いしているのでしょうか? メッセージの通り、Rubyのスレッドスケジューラーが、 デッドロックと判定しているからでしょう。 (こんな答えを期待されているわけではないような 気もしますが。) 十分長い時間は無限と同じようなものであると近似して、 以下の方法ではどうでしょうか? InfiniteTime = 20 * 365 * 24 * 60 * 60 a = Thread.new { sleep(InfiniteTime) } trap("SIGINT") { puts "SIGINT!!!\n"; a.kill } a.join ---- 小迫@ソフネック 渋谷区恵比寿1-15-1