如何打开ruby进程的所有开放资源

时间:2013-03-26 14:45:40

标签: ruby

我知道每个unix进程都带有三个开放资源STDINSTDOUTSTDERR, 如果我打开一个文件:

passwd = File.open('/etc/passwd')
puts passwd.fileno`

这些资源的数量会增加。有没有办法获得ruby进程打开的所有资源?

1 个答案:

答案 0 :(得分:2)

即使在Ruby中运行外部进程,通常也不会打开不同的IO对象。除非您明确更改,否则将共享相同的STDERRSTDOUTSTDIN。要获得所有IO,您可以执行此操作:

ObjectSpace.each_object(IO).to_a
# => [
#   #<IO:<STDERR>>,
#   #<IO:<STDOUT>>,
#   #<IO:<STDIN>>,
#   #<IO:fd 1>,
#   #<IO:fd 0>,
#   #<File:/usr/local/lib/ruby/2.0.0/irb/lc/error.rb (closed)>
# ]