Project

General

Profile

Actions

Bug #9617

closed

Windows7 issue with Kernel.spawn close_others => false

Added by lionel_perrin (Lionel PERRIN) about 10 years ago. Updated about 10 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 2.0.0p451 (2014-02-24) [i386-mingw32]
[ruby-core:61401]

Description

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 `<main>'

Note: the same test with the fileno of a file opened from master.rb lead to the same exception in child.rb

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0