わたなべです. "NAKAMURA, Hiroshi" <nakahiro / sarion.co.jp> writes: :> あれ? そうなりますか. 試してみると瞬時に :> % 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 ではないです. ruby 側で設定してます. :UNIX側の挙動に合わせるとすると,Exit処理を, :RubyならensureやらEXITブロックの実行やらして欲しいですよね... p PLATFORM END {p "END"} begin sleep 10 rescue Interrupt p "SIGINT" end を実行して ^C すると "i386-cygwin32" "SIGINT" "END" になるからちゃんと END block も実行してます. :が,[ruby-list: 13217]に書いたように,ensureされたりされなかったり. :もしかして,単に表示されてないだけ? 初期化とかハンドラの設定とかされないうち ^C されたら無理なの で, 何か表示するようにしておいてそのあとで ^C してみるとか. :> cygwin B21.0 の snapshot を使ってるからかな? : :Cygwinβ19の上に載せて,Win98で試してます... :あとで環境ができたらNTでもやってみます. B19 とか Win9X だとあやしいかもしれません. -- わたなべひろふみ