From: normalperson@... Date: 2014-05-10T01:28:50+00:00 Subject: [ruby-core:62491] [ruby-trunk - Bug #9751] Process.wait does not work correctly in a thread Issue #9751 has been updated by Eric Wong. sam.saffron@gmail.com wrote: > def test > if pid = fork > else > sleep 3 > puts "exiting child" > exit 0 A workaround is to use exit!(0) in the child. Normal "exit" may be buggy, looking into it. > end > end ---------------------------------------- Bug #9751: Process.wait does not work correctly in a thread https://bugs.ruby-lang.org/issues/9751#change-46654 * Author: Sam Saffron * Status: Open * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: 1.9, 2.0, 2.1, 2.2 * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- The following code fails under Ruby 1.9+, used to work on 1.8 with green threads ``` def test if pid = fork puts "child pid is #{pid} waiting ..." begin Process.wait(pid) puts "child exited" rescue => e p e end else sleep 3 puts "exiting child" exit 0 end end # this works as expected test puts "testing in thread" # this will hang Thread.new do test end.join ``` Additionally on SIGINT I am seeing a zombie + [BUG] pthread_mutex_lock: Invalid argument (EINVAL) -- https://bugs.ruby-lang.org/