From: ko1@... Date: 2017-07-27T04:19:59+00:00 Subject: [ruby-dev:50188] [Ruby trunk Bug#13768] SIGCHLD and Thread dead-lock problem Issue #13768 has been updated by ko1 (Koichi Sasada). これ、dead-lock の定義の問題なので、ちょっと議論が要るような気がしています。 > Signal.trapを設定していたら常にデッドロックではない、とすべきというところでしょうか。 いいんかな、これで。例えば、webrick 使ってたらデッドロック検出出来ないとか。 ---------------------------------------- Bug #13768: SIGCHLD and Thread dead-lock problem https://bugs.ruby-lang.org/issues/13768#change-65956 * Author: keiju (Keiju Ishitsuka) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- けいじゅ@いしつかです. 下記のプログラムを実行するとThreadがデッドロックしたと例外が発生します. # コメント部分をはずせば, デッドロックはしません シグナルのtrapが絡むときのデッドロックの検知に問題があるのではないかと 思いますがいかがでしょう? ``` % ruby -v ruby 2.5.0dev (2017-07-25 trunk 59417) [i686-linux] ``` ```ruby q = Queue.new p = Queue.new trap(:SIGCHLD) do puts "SIGCHLD" q.push 1 end Thread.start do Process.spawn("/bin/sleep 1") end #Thread.start do # loop do # sleep 100 # end #end th = Thread.start{ p.push q.pop } p.pop ``` __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<--- -- https://bugs.ruby-lang.org/