Bash - 获取当前用户 CPU 利用率

Bash - 获取当前用户 CPU 利用率

我正在尝试做一件我认为相当简单的任务,但我遇到了一个奇怪的问题,不幸的是由于我的 Bash 经验有限(我通常使用 Ruby 编写脚本),我需要一些帮助。

我所要做的就是编写一个脚本,简单地检查 CPU 利用率,如果利用率超过特定量,它就会采取一些措施。

因此我开始简单地捕获 CPU 利用率,top如下所示:

 CPU_SUMMARY=(`top -b -n 1 | grep ^Cpu`)

不幸的是,当我检查结果时,我一开始就得到了一些额外的信息:

$ echo $CPU_SUMMARY
24ms, 0.8y, 0.0ubuntui, 97.77d, 0.2Tue 9a, 0.0137i, 0.0i, 0.2tCpu(s): 1.1%us, 0.8%sy, 0.0%ni, 97.7%id, 0.2%wa, 0.0%hi, 0.0%si, 0.2%st

“24ms, 0.8y...0.2t”从何而来?如果我运行相同的命令top -b- n 1 | grep ^Cpu而不尝试将其分配给变量,我会得到:

Cpu(s):  1.1%us,  0.8%sy,  0.0%ni, 97.7%id,  0.2%wa,  0.0%hi,  0.0%si,  0.2%st

所以我只是有点困惑为什么最初的 24ms...文本来自这里。

我甚至尝试提取我想要的部分,忽略下面的附加文本:

$ echo $CPU_SUMMARY | grep -o -E "[0-9\.]+%us"
24ms, 0.8y, 0.0ubuntui, 97.77d, 0.2Tue 9a, 0.0142i, 0.0i, 0.2t | grep -o -E "[0-9\.]+s"1.1%us

我也得到了同样的结果?

我是 Ubuntu 12.04。

感谢您的帮助。

马特

答案1

如果你想改进示例,请使用以下 egrep

$ echo $CPU_SUMMARY | egrep -o '([0-9\.]+%us)'
1.1%us

另一方面,这将总结所有 CPU 使用率(在示例的 ps 输出的第 3 列中)

$ ps fuxw | awk '{ if ($3 ~ /^[0-9]/) {SUM +=$3}} END  {print SUM"%"}'      
18.5%

相关内容