我知道每个 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将被共享。要获得所有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)>
# ]