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