Issue #1952 has been updated by Akira T…
Assignee changed from Yukihiro M. to Koichi Sasada
Priority changed from High to Normal
% Done changed from 100 to 0
開発者会議で笹田さんなどと議論したところ、
以下のスクリプトで、2回め以降の ^C で 1 が表示されないのはバグであるという
結論になりました。
% ruby -ve ’
Thread.new do
begin
begin
p 1
sleep
ensure
raise
end
rescue
retry
end
end.join
’
ruby 2.0.0dev (2012-03-16 trunk 35049) [x86_64-linux]
1
^C1
^C^C^C^C^C^C^C
^C でメインスレッドが死んだ後、他のスレッドを殺すのに
各スレッドに例外を投げるわけですが、一発で死なない場合、
それ以降人間が ^C を送っても無視される、というのが問題で、
人間が ^C を送る度に例外を再度投げるのが適切であろう、
という点には合意に達して、笹田さんが直すとのことです。
なお、何回投げても死なない、というのはプログラムがそのように書かれているということで、
それを無理やり殺す、というのは、New Feature であろう、ということで
上記の直す範囲には入りません。
Feature #1952: cannot stop with Ctrl+C
Author: Usaku NAKAMURA
Status: Assigned
Priority: Normal
Assignee: Koichi Sasada
Category: core
Target version: 2.0.0
=begin
以下のスクリプトがCtrl+Cで停止せず、Ctrl+C押下後はkill -9でしか殺せません。
Thread.new do
begin
begin
sleep
ensure
raise
end
rescue
retry
end
end.join
=end