From: comisarulmoldovan@... Date: 2015-03-27T22:34:59+00:00 Subject: [ruby-core:68659] [Ruby trunk - Bug #11009] closed STDOUT status does not get inherited to children processes created with exec Issue #11009 has been updated by Constantin Gavrilescu. Actually, the fails this way only in 1.8.7. Ruby 2.1 child process reports the STDOUT as open and uses successfuly STDOUT, even if the parent closed it, which is also strange, but not as bad. ---------------------------------------- Bug #11009: closed STDOUT status does not get inherited to children processes created with exec https://bugs.ruby-lang.org/issues/11009#change-51952 * Author: Constantin Gavrilescu * Status: Open * Priority: Normal * Assignee: * ruby -v: ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- When closing STDOUT, then STDOUT.closed? returns true. In a child process started with exec, STDOUT is closed but it does closed? returnes false. Also, in the child process, writing to STDOUT fails silently, so the user has no idea that his stdout is closed. Ruby should return the proper response to closed? and not fail silently when writing to the closed STDOUT stream. #!/usr/bin/ruby child_mode = true if ARGV[0] == 'child_mode' process_name = child_mode ? "CHILD" : "PARENT" if !child_mode STDERR.puts "Closing stdout and forking" STDOUT.close STDERR.puts "#{process_name} STDOUT closed? #{STDOUT.closed?}" exec 'ruby', $0, "child_mode" else STDERR.puts "#{process_name} STDOUT closed? #{STDOUT.closed?}" end STDERR.puts "Trying to write to STDOUT a test line" STDOUT.puts "#{process_name} test puts to STDOUT" STDERR.puts "Done writing STDOUT. Did you see anything?" -- https://bugs.ruby-lang.org/