From: akr@... Date: 2014-03-15T14:41:33+00:00 Subject: [ruby-core:61515] [ruby-trunk - Bug #9617] Windows7 issue with Kernel.spawn close_others => false Issue #9617 has been updated by Akira Tanaka. Documentation patch is welcome. ---------------------------------------- Bug #9617: Windows7 issue with Kernel.spawn close_others => false https://bugs.ruby-lang.org/issues/9617#change-45804 * Author: Lionel PERRIN * Status: Rejected * Priority: Normal * Assignee: * Category: platform/mingw * Target version: * ruby -v: ruby 2.0.0p451 (2014-02-24) [i386-mingw32] * Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- I faced an issue while trying to inherit a file or pipe handle from a master process to its child on windows 7. I tried this implementation: * master.rb: ~~~ rd, wr = IO.pipe puts "Pipe opened: #{rd.fileno} <= #{wr.fileno}" cmd = "ruby child.rb #{rd.fileno}" pid = Kernel.spawn cmd, :close_others => false wr.write "Hello World\n" Process.wait pid ~~~ * child.rb: ~~~ puts "Child:Start #{ARGV}" rd = IO.new(ARGV[0].to_i, mode: "r") puts rd.read ~~~ On windows I get the following output while it works fine on linux. ~~~ Pipe opened: 3 <= 4 Child:Start ["3"] child.rb:2:in `initialize': Bad file descriptor (Errno::EBADF) from child.rb:2:in `new' from child.rb:2:in `
' ~~~ Note: the same test with the fileno of a file opened from master.rb lead to the same exception in child.rb -- http://bugs.ruby-lang.org/