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