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

问题描述 投票:2回答:1

我有一个消耗大量内存的Ruby进程,我想运行一个shell命令来找出我的Ruby进程正在使用多少内存。如果我进行分叉,那么所有的内存都将复制到新进程中,而我的机器无法支持这么多的内存使用。有没有办法:

  1. 不使用fork运行shell命令,或
  2. 从Ruby中找出我的进程使用了​​多少内存?
ruby subprocess
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.