Writing to STDOUT after closing controlling terminal



Hi,
I don't know if this is a dumb question or not (I hope it isn't), but it
seems to me there's something wrong here. I've been using Ruby for a
long time now, and I never noticed this (maybe it wasn't working like
this in the past), and it just seems odd.
If I write the following code:

sleep(5)
begin
puts 'hi!'
rescue
File.open('output', 'w') {|io| io.puts $!.message }
end

And execute it in Ruby 1.9.1p243 in a graphical terminal (e.g.: konsole)
as a foreground process I obviously get this:

$ ./test.rb
hi!

And there's no "output" file created sine no exception was raised.

Now, If I do:
$ ./test.rb &
[1] 28137
and immediately close konsole, 5 seconds later I get:
$ cat output
Input/output error - <STDOUT>

Is this ok? I seems to me that one shouldn't have to care if the
controlling terminal is closed when doing "puts" to avoid this exception
from ending my ruby process.

As a sidenote, with Ruby 1.8.7p174 the process doesn't get any
exception. If now I write (to check for normal process completion):

sleep(5)
begin
puts 'hi!'
File.open('output2', 'w') {|io| io.puts 'ok' }
rescue
File.open('output', 'w') {|io| io.puts $!.message }
end
with

and execute it as before, I get the "output2" file with the "ok" string
in it.

Is this a bug? a feature?

Thank you,
Matt
--
Posted via http://www.ruby-forum.com/.

.