From: Akira Tanaka <akr@...>
Date: 2012-03-18T14:05:26+09:00
Subject: [ruby-dev:45385] [ruby-trunk - Feature #1952] cannot stop with Ctrl+C


Issue #1952 has been updated by Akira Tanaka.

Assignee changed from Yukihiro Matsumoto 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
https://bugs.ruby-lang.org/issues/1952#change-24691

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



-- 
http://bugs.ruby-lang.org/