From: Tomoyuki Chikanaga Date: 2011-07-01T00:04:57+09:00 Subject: [ruby-dev:44005] [Ruby 1.9 - Bug #4950][Open] ほぼ同時に異なる種類のシグナルを受信すると片方のシグナルハンドラが実行されない Issue #4950 has been reported by Tomoyuki Chikanaga. ---------------------------------------- Bug #4950: ほぼ同時に異なる種類のシグナルを受信すると片方のシグナルハンドラが実行されない http://redmine.ruby-lang.org/issues/4950 Author: Tomoyuki Chikanaga Status: Open Priority: Normal Assignee: Category: core Target version: 1.9.3 ruby -v: ruby 1.9.3dev (2011-06-30 trunk 32335) [x86_64-darwin10.8.0] 以下のようなスクリプトを実行すると [1,2] か [2,1] が表示されることが期待されますが、 実際には [1] が表示されます(稀に [2] になることもあります)。 a = [] trap(:INT) { a.push(1) } trap(:TERM) { a.push(2) } pid = $$ fork do sleep 0.5 puts "send start" Process.kill(:INT, pid) Process.kill(:TERM, pid) puts "send end" end puts "sleep start" sleep 3 puts "sleep end" p a Signal.trap のブロック内で puts してみると、一方のシグナルハンドラが終了時に遅れて実行されているようです。 -- http://redmine.ruby-lang.org