From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1998-07-13T00:10:00+09:00 Subject: [ruby-dev:3267] [REQ] Thread.abort_on_exception and abort and exit けいじゅ@日本ラショナルソフトウェアです. メイルをマージします. In [ruby-dev :3258 ] the message: "[ruby-dev:3258] Re: [BUG] Thread.abort_on_exception ", on Jul/10 17:19(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >abortの挙動を定義しないといけませんね.今の定義は > > $!がセットされていればバックトレースを出力してexitする > >というものですが.abort_on_exceptionは名前からしてabortと同 >じ動作をすべきのように思えます.が,例外をmain_threadに送り >つけるという仕様でも妥協できます. > >どっちがよいんでしょうねえ. やはり, デバッガとの兼ねあわせを考えると, 後者の方がありがたいですね. In [ruby-dev :3259 ] the message: "[ruby-dev:3259] Re: [REQ] abort ", on Jul/10 17:23(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >|私のイメージだと abort(3)の感じだったもので. コアダンプの代わりにバッ >|クトレースを出力すると. > >まあ,問題にしているのは直前に発生した例外ではなくabortする >という行為であると考えると,現在のスタックトレースを出すとい >うのも納得できる仕様です.どっちが良いですか? >|でも, Thread.abort_on_exceptionと同じで例外としてキャッチできないのも >|変なのかな?? > >でも,例外としてキャッチできるならraiseでよいじゃないかって >気もしますよね.abortならちゃんとabortしなきゃ. でも, exitも例外としてキャッチできますよね. だから, abortも例外でよい ような気がします. exit --> SystemExit abort --> SystemAbort いかがでしょう? ところで, exitの動作ですけど... begin Thread.start do begin exit rescue SystemExit p "a" end end sleep 5 rescue SystemExit p "b" end これは, 中のrescueでキャッチできます. begin Thread.start do begin exit rescue p "a" end end sleep 5 rescue SystemExit p "b" end これだと例外をキャッチできないんですね. でも, 他のスレッド特にメインス レッドとしてはこのままexitされても嬉しくないですよね? 1. exitを実行したスレッドがrescueしなかった時は, メインスレッドに SystemExitを再送する. 2. exitはSystemExitをメインスレッドに投げる. 3. 他のスレッド全てにもSystemExit例外を起こし, 全スレッドが全て例外を キャッチしない時のみ実際にexitする. のどれかが良いと思うのですがいかがでしょう? __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@rational.com <<---