なひです. Cygwin版ruby-1.2.3のsignal handlingについてですが, ruby側の問題ではなさそうです... > From: WATANABE Hirofumi [mailto:eban / os.rim.or.jp] > Sent: Sunday, March 28, 1999 1:52 AM > :> あれ? そうなりますか. 試してみると瞬時に > :> % ruby -ve 'begin sleep 10; ensure p "ensure\!"; end' > :> ruby 1.2.3(99/02/16) [i386-cygwin32] > :> "ensure!" > :> /tmp/rb001021:1:in `sleep': Interrupt > :> from /tmp/rb001021:1 > :> となります. Linux も OpenBSD も同じでした. > : > :SIGINTのデフォルトハンドラはExitでしたっけ. > > /tmp/rb001021:1:in `sleep': Interrupt > from /tmp/rb001021:1 > と表示してるから単に exit ではないです. man -s 5 signalの「Exit」のつもりでした. SIGINTはruby側で捉えていたんでしたね.混乱させてしまいました. > 初期化とかハンドラの設定とかされないうち ^C されたら無理なの > で, 何か表示するようにしておいてそのあとで ^C してみるとか. 相変わらずWin98 with Cygwin.dllβ19で試してみました. $ cat tst.rb END { p "END" } p PLATFORM begin sleep 10 rescue Interrupt p "SIGINT" ensure p "ensure!" end $ ruby tst.rb "i386-cygwin32" "SIGINT" "ensure!" "END" BASH.EXE-2.01$ ruby tst.rb "i386-cygwin32" "ensure!" "END" tst.rb:4: Interrupt で,2つの結果が出ます.rescueできてたりできなかったりしてますが, ensureとENDブロックは実行されています. やはりなひの^Cを叩くタイミングがおかしかっただけのようです. またしてもお騒がせしてしまいました.m(..m ちなみに前者は一度だけ^Cを押したもの, 後者は連続して二度^Cを押したものです. 実は前回実験した時も, 「一度^Cを押してもなかなか(5秒くらい)止まらないので」 ^Cを連打していたのでした.これはきっと, 一度目のInterruptによってrescueに捕まりに行く過程で, 再びInterruptされている,ということでしょうね (そして正しくensureされる). この,「一度^Cを押してもなかなか止まらない」というのは, どうも変ですね.NTだとまた違うのかな...