我知道每个unix进程都带有三个开放资源STDIN
,STDOUT
和STDERR
,
如果我打开一个文件:
passwd = File.open('/etc/passwd')
puts passwd.fileno`
这些资源的数量会增加。有没有办法获得ruby进程打开的所有资源?
答案 0 :(得分:2)
即使在Ruby中运行外部进程,通常也不会打开不同的IO
对象。除非您明确更改,否则将共享相同的STDERR
,STDOUT
和STDIN
。要获得所有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)>
# ]