gpt4 book ai didi

ruby - 顶级程序从 ruby​​ 返回的值少于 linux 上的 bash

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:45 27 4
gpt4 key购买 nike

我正在尝试将 top 的结果合并到 ruby​​ 程序中。但是 top 在 ruby​​ 的子 shell 中调用时的行为与直接在 shell 中运行时的行为不同。具体来说,它在从 ruby​​ 运行时排除了许多结果。

例如,运行 top -bn1 | bash 中的 wc -l 返回“133”。使用反引号从 irb 运行相同的命令返回“17”。

为什么从 shell 调用 top 和从子 shell 调用 top 有区别?如何在 ruby​​ 脚本中获得 top 的完整输出?

注意事项

我正在运行 Ubuntu 12.04.1 LTS(精确)。这个问题不会出现在 mac OS X 上,它提供了一个完全不同的 top 版本。

使用“-d”延迟标志似乎不会改变行为。也不会增加迭代次数。

我知道 ps 返回许多与 top 相同的统计信息,但我对 top 对 CPU 使用率的估计特别感兴趣,它的计算方式不同。

最佳答案

显然,top 在 ruby​​ 中运行时尊重终端的大小。我敢打赌你的终端尺寸是 17 行高。尝试删除 ENV 哈希中的 LINES 条目:

$ irb
irb(main):001:0> %x{top -bn1 | wc -l}
=> "36\n"
irb(main):002:0> ENV.delete 'LINES'
=> "36"
irb(main):003:0> %x{top -bn1 | wc -l}
=> "169\n"

如果你想知道有多少进程在运行,你可以从 ruby​​ 中写:

num = Dir.glob('/proc/*').select {|d| File.directory? d and d.match(/\/\d+$/)}.length

对于 CPU 使用率,可能是:

idle = %x{vmstat 1 2}.split[-2].to_i
usage = 100 - idle

关于ruby - 顶级程序从 ruby​​ 返回的值少于 linux 上的 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14164994/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com