From: "felipec (Felipe Contreras)" Date: 2013-09-08T16:23:03+09:00 Subject: [ruby-core:57070] [ruby-trunk - Bug #7358] Wrong fd redirection on fork Issue #7358 has been updated by felipec (Felipe Contreras). felipec (Felipe Contreras) wrote: > That's not what I want, and yes, setting that does nothing, or *should* do nothing, but that's not what the command above did, it failed. > > Fortunately it seems to be fixed now. Actually, I went down to bisect where the problem was fixed, and I found it: https://github.com/ruby/ruby/commit/2fb032b74be9f306fbd2f95d85f8352f4a6027d6 So it turns out it's fixed in Ruby v2.0, but not v1.9, so this is not "rejected", it should be "already fixed in v2.0", and maybe you would want to backport the fix. FTR. This is the error I get before the patch: yes [ASYNC BUG] consume_communication_pipe: read EBADF ruby 2.0.0dev (2012-06-09 trunk 35968) [x86_64-linux] [NOTE] You may have encountered a bug in the Ruby interpreter or extension libraries. Bug reports are welcome. For details: http://www.ruby-lang.org/bugreport.html ---------------------------------------- Bug #7358: Wrong fd redirection on fork https://bugs.ruby-lang.org/issues/7358#change-41679 Author: felipec (Felipe Contreras) Status: Rejected Priority: Normal Assignee: Category: Target version: ruby -v: 1.9.3p327 Backport: It seems fd redirecton only works with spawn, not with fork+exec (at least for fd 3). % ruby -v ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-linux] #!/usr/bin/env ruby tmp = File.new('/tmp/foo', File::CREAT | File::WRONLY) cmd = ['echo', 'yes'] pid = Process.spawn(*cmd, 3 => tmp) Process.wait(pid) pid = fork do Process.exec(*cmd, :close_others => true, 3 => tmp) end Process.wait(pid) -- http://bugs.ruby-lang.org/