如何在不分叉的情况下运行shell命令

时间:2013-09-25 18:30:37

标签: ruby subprocess

我有一个耗费大量内存的Ruby进程,我想运行一个shell命令来找出我的Ruby进程使用了​​多少内存。如果我fork,所有内存都会被复制到新进程,而我的盒子不能支持这么大的内存使用量。有没有办法:

  1. 运行shell命令而不分叉,或
  2. 了解我的进程在Ruby中使用了多少内存?

1 个答案:

答案 0 :(得分:1)

您可能需要打开文件/ proc / PID / status(其中 PID 是您的进程的进程ID,$$变量)而不是分叉在ruby中),并阅读标有 VmSize 的行。

File.open("/proc/#{$$}/status").each { |line|
    if line =~ /VmSize/
        puts line
    end
}

在irb中运行这个给了我:

irb(main):003:0> File.open("/proc/#{$$}/status").each { |line|
irb(main):004:1* if line =~ /VmSize/
irb(main):005:2> puts line
irb(main):006:2> end
irb(main):007:1> }
VmSize:   138972 kB