我在 Linux 和 Windows 上看到了同样的问题,但没有 Mac(终端)。有人可以告诉我如何以百分比的形式获取当前处理器利用率,例如输出示例40%
。谢谢
这在 Mac 上有效(包括“%”符号):
ps -A -o %cpu | awk '{s+=$1} END {print s "%"}'
简单解释一下:
ps
是进程状态工具,大多数类Unix操作系统都支持它。我们要传递给它一些标志:
-A
表示所有进程,而不仅仅是您运行的进程。-o
允许我们指定输出格式。在这种情况下,我们只需要 ps
输出的cpu%列。这将为我们获取所有进程的CPU使用情况列表,如下所示:
0.0 1.3 27.0 0.0
现在我们需要将这个列表加起来得到一个最终数字,因此我们将 ps
的输出传输到 awk
中。awk 是一个非常强大的用于解析和操作文本的工具。我们只需要简单地将这些数字加起来,然后打印出结果,并在末尾添加“%”即可。
top -l
或从macOS活动监视器报告的方法相比,CPU使用率的测量非常不准确。 - undefined在@Jon R.和@Rounak D之前的答案基础上,以下代码行将打印用户和系统值的总和,并添加了百分比。我已经测试过这个值,喜欢它大致与macOS Activity Monitor中显示的百分比相符。
top -l 2 | grep -E "^CPU" | tail -1 | awk '{ print $3 + $5"%" }'
cpu_percent=$(top -l 2 | grep -E "^CPU" | tail -1 | awk '{ print $3 + $5"%" }')
提示:您可能还会对 uptime 命令的输出感兴趣,该命令可以显示系统的负载情况。
将所有 CPU 使用率加起来,可能会得到一个大于 100% 的数字(可能是多个内核)。
这里有一个更简单的方法,但它也存在一些问题:
top -l 2 | grep -E "^CPU"
这里提供了2个样本,第一个是无意义的(因为它在样本之间计算CPU负载)。
另外,你需要使用像(\d+\.\d*)%
这样的正则表达式或某些字符串函数来提取值,并添加“用户”和“系统”值以获得总值。
top -l 1 | grep -E "^CPU" | grep -Eo '[^[:space:]]+%' | head -1
如果您也想要去掉最后一个%
符号,
top -l 1 | grep -E "^CPU" | grep -Eo '[^[:space:]]+%' | head -1 | sed s/\%/\/
你可以做到这一点。
printf "$(ps axo %cpu | awk '{ sum+=$1 } END { printf "%.1f\n", sum }' | tail -n 1),"
这只生成统计数据,跳过额外的工作:
top -R -F -n 0
要查找CPU利用率,请按照Michael Behrens所示进行解析:
top -R -F -n 0 -l 2 -s 0 | grep -E "^CPU" | tail -1 | awk '{ print $3 + $5"%" }'
使用额外的-s 0
参数可以使第二个打印输出没有延迟(默认为1秒)。Jon R已经很好地解释了为什么一个样本不足以说明问题:它只显示了未指定时间段内的平均CPU使用率。
ps -e -o %cpu | awk '{s+=$1} END {print s}'
,它可以计算CPU的总占用率。 - vcsjones