exec()抛出Errno :: EBADF和ruby 2.1.1

时间:2014-03-25 07:01:56

标签: ruby osx-mavericks rbenv

以下代码在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之外还有其他什么改变了吗?

1 个答案:

答案 0 :(得分:0)

除了设置:close_others => false之外,将close_on_exec = false作为选项进行解决。 E.g。

exec "./client.rb", f.fileno.to_s, :close_others => false