わたなべです.

"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 だとあやしいかもしれません.

-- 
わたなべひろふみ