我知道这个问题已经被问过很多遍了 但不幸的是,给出的答案似乎都无法满足我的需求。
每个人似乎都推荐/proc/stat
,但我似乎找不到1个符合预期的答案:
正如您在此处看到的那样,核心0报告使用了16%,尽管实际上仅使用了3%
实际上,它是否为100%无关紧要,它仍然报告16%,仅增加0.01%-0.02%
我还测试了仅使用$2+$4 +$5
而不是整个范围的另一种方法,但是即使返回的结果也不准确...
如上图所示,CPU监视器如何获取其信息?
因为除非所有人都做错了,否则它似乎不会通过/proc/stat
进行。
重要资源:
我仔细研究了很多,但它们几乎都指向相同的事物。
至于脚本,我知道它有点混乱,我对bash的使用不多,但这是:
#!/bin/bash
H=($(awk '/MHz/{printf "%.2fGHz|", $4/1000}' /proc/cpuinfo))
A=($(awk 'FNR>1 && FNR<4 {
i=$5+$6; printf "%d|%d\n", i, i+$2+$3+$4+$7+$8+$9
}' /proc/stat))
sleep 0.125
awk -v a="${A[*]}" -v h="${H[*]}" -v n="0" 'FNR>1 && FNR<4 {
n++
split(h,s,"|"); split(a,p,"|")
i=$5+$6; t=(i+$2+$3+$4+$7+$8+$9)-p[n,1]
printf "%s: %s %.2f%\n", $1, s[n], ((t-(i-p[n,0]))/t)*100
}' /proc/stat
几乎所有其他答案都遵循了它...
如果有更好的方法可以做到这一点(例如将cpuinfo
与stat
合并,或者不必要地拆分数组以防止s[n]
报告标量错误,甚至在awk内睡眠和重新阅读),请务必进行改进。 :)