なひです.

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だとまた違うのかな...