Project

General

Profile

Actions

Bug #11009

closed

closed STDOUT status does not get inherited to children processes created with exec

Added by costi (Constantin Gavrilescu) about 9 years ago. Updated about 9 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
[ruby-core:<unknown>]

Description

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.

#!/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?"
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0