Project

General

Profile

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?" 
 ~~~

Back