我在ruby中有一个守护进程,我正在尝试执行bash命令并将其输出到程序中。我可以使用ruby中的反引号功能来执行像ls -a
这样的bash命令。但由于top
命令是实时的,我无法将命令的输出输入到我的程序中。帮助我。
为什么我需要实时数据是因为我试图监视所有进程并在达到内存限制时终止它。我不想做top -bn 1
require 'rubygems'
require 'daemons'
options = {
:backtrace => true,
:app_name => 'limits_logger',
:log_dir => '/home/charizard/',
:log_output => true
}
Daemons.daemonize(options)
puts "#{Time.now} - started #{self}."
puts %x{ top -b }
答案 0 :(得分:1)
目前还不清楚你想对数据做什么,但解析top
可能不是一个好的解决方案。它并不意味着机器可读。顶级提供的所有数据都可通过更多程序员友好的机制获得:
您可以通过/proc
文件系统获取有关所有流程的信息。
您可以使用ps
命令查询单个流程,或获取有关所有流程的各种数据。
有各种Ruby进程列表查询库,如SysUtils,它们为Linux进程列表查询提供了一个Ruby API。
所有内容都可以通过/proc
获得,大多数其他工具/ API都位于其中。
无论如何,我不会尝试解析top的输出。
答案 1 :(得分:0)
IO.foreach("|top -b") { |line| puts line }