Bug #11009
Updated by nobu (Nobuyoshi Nakada) about 9 years ago
When closing `STDOUT`, STDOUT, then `STDOUT.closed?` STDOUT.closed? returns `true`. true. In a child process started with exec, `STDOUT` STDOUT is closed but it does `closed?` returns `false`. closed? returnes false. Also, in the child process, writing to `STDOUT` STDOUT fails silently, so the user has no idea that his `stdout` stdout is closed. Ruby should return the proper response to `closed?` closed? and not fail silently when writing to the closed `STDOUT` 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?" ~~~