From: nobu@... Date: 2015-03-28T02:38:07+00:00 Subject: [ruby-core:68664] [Ruby trunk - Bug #11009] [Rejected] closed STDOUT status does not get inherited to children processes created with exec Issue #11009 has been updated by Nobuyoshi Nakada. Description updated Status changed from Open to Rejected Ruby does not close the standard file descriptors 0..2 actually, but just disconnects them from the corresponding IO objects, since r23705. And they are filled with broken pipes unless opened, since r33567. This is because closing these descriptors often results in unexpected and bad side-effects. You can close stdout of a child process by `exec(... out: :close)` if you really need it. ---------------------------------------- Bug #11009: closed STDOUT status does not get inherited to children processes created with exec https://bugs.ruby-lang.org/issues/11009#change-51957 * Author: Constantin Gavrilescu * Status: Rejected * 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?` returns `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. ~~~ruby #!/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/