From: nobu@... Date: 2014-05-10T04:32:31+00:00 Subject: [ruby-core:62495] [ruby-trunk - Bug #9751] [Closed] Process.wait does not work correctly in a thread Issue #9751 has been updated by Nobuyoshi Nakada. Status changed from Open to Closed % Done changed from 0 to 100 Applied in changeset r45899. ---------- thread.c: stop if forked in a sub-thread * thread.c (thread_start_func_2): stop if forked in a sub-thread, the thread has become the main thread. [ruby-core:62070] [Bug #9751] ---------------------------------------- Bug #9751: Process.wait does not work correctly in a thread https://bugs.ruby-lang.org/issues/9751#change-46657 * Author: Sam Saffron * Status: Closed * 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/