以下代码在Ruby 1.9.3中运行良好,但在Ruby 2.1.1中引发Bad file descriptor
异常(即使close_on_exec
设置为false)。
#!/usr/bin/env ruby
if ARGV.empty?
f = open("/dev/null")
f.close_on_exec = false if respond_to?(:close_on_exec=)
else
f = IO.for_fd(ARGV[0].to_i)
exit
end
exec "./client.rb", f.fileno.to_s
输出:
./client.rb:7:in `for_fd': Bad file descriptor (Errno::EBADF)
from ./client.rb:7:in `<main>'
除了close_on_exec
之外还有其他什么改变了吗?
答案 0 :(得分:0)
除了设置:close_others => false
之外,将close_on_exec = false
作为选项进行解决。 E.g。
exec "./client.rb", f.fileno.to_s, :close_others => false