diff --git a/lib/puppet/util.rb b/lib/puppet/util.rb index 06c7b11815d..9270bce3e21 100644 --- a/lib/puppet/util.rb +++ b/lib/puppet/util.rb @@ -478,13 +478,15 @@ def safe_posix_fork(stdin = $stdin, stdout = $stdout, stderr = $stderr, &block) $stderr = STDERR begin - Dir.foreach('/proc/self/fd') do |f| - if f != '.' && f != '..' && f.to_i >= 3 - begin - IO.new(f.to_i).close - rescue - nil - end + d = Dir.new('/proc/self/fd') + ignore_fds = ['.', '..', d.fileno.to_s] + d.each_child do |f| + next if ignore_fds.include?(f) || f.to_i < 3 + + begin + IO.new(f.to_i).close + rescue + nil end end rescue Errno::ENOENT, Errno::ENOTDIR # /proc/self/fd not found, /proc/self not a dir