1

我在 ruby​​ 中有一个守护进程,我正在尝试执行一个 bash 命令并将其输出到程序中。我可以使用 ruby​​ 中的反引号功能来执行 bash 命令,例如ls -a. 但由于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 }
4

2 回答 2

1

目前尚不清楚您想对数据做什么,但解析top可能不是一个好的解决方案。它并不意味着机器可读。top 提供的所有数据都可以通过对程序员更友好的机制获得:

  • 您可以通过文件系统获取有关所有进程的信息/proc

  • 您可以使用该ps命令查询单个进程,或获取有关所有进程的各种数据。

  • 有各种 Ruby 进程列表查询库,例如SysUtils,它们为 Linux 进程列表查询提供了 Ruby API。

一切都可以通过 获得/proc,大多数其他工具/API 都位于此之上。

在任何情况下,我都不会尝试解析 top 的输出。

于 2013-09-16T18:07:47.773 回答
0
IO.foreach("|top -b") { |line| puts line }
于 2013-09-25T09:55:58.957 回答