0

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

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

这些资源的数量将会增加。有什么方法可以获取 ruby​​ 进程打开的所有资源?

4

1 回答 1

2

即使在 Ruby 中运行外部进程,通常也不会打开不同的IO对象。除非您明确更改它们,否则相同STDERRSTDOUT、 和STDIN将被共享。要获得所有IOs,您可以这样做:

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)>
# ]
于 2013-03-26T14:56:29.307 回答