Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何以百分比显示CPU使用的精确计算_Linux_Bash_Awk_Cpu Usage - Fatal编程技术网

Linux 如何以百分比显示CPU使用的精确计算

Linux 如何以百分比显示CPU使用的精确计算,linux,bash,awk,cpu-usage,Linux,Bash,Awk,Cpu Usage,我知道这个问题已经被问了很多次了 但不幸的是,所有给出的答案似乎都不能满足我的需要 每个人似乎都推荐/proc/stat,但我似乎找不到一个如预期般有效的答案: 正如您在这里看到的,Core0报告使用率为16%,尽管实际上只有3% 事实上,不管它是否为100%,它仍然报告为16%,只有0.01%-0.02%的增长 我还测试了另一种方法,只使用$2+$4+$5而不是整个范围,但即使这样也会返回不准确的结果 CPU监视器(如上图)是如何获取其信息的?? 因为它似乎不是通过/proc/stat实现的

我知道这个问题已经被问了很多次了 但不幸的是,所有给出的答案似乎都不能满足我的需要

每个人似乎都推荐
/proc/stat
,但我似乎找不到一个如预期般有效的答案:

正如您在这里看到的,Core0报告使用率为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
#/bin/bash
H=($(awk'/MHz/{printf'%.2fGHz |“,$4/1000}'/proc/cpuinfo))

A=($(awk'FNR>1&&FNR1&&FNR是
p[n,1]
p[n,0]
?@JamesBrown
p
A
的拆分数组:
split(A,p,“|”)
,其结果基本上是
(空闲,总计)
,请查看第一个值得注意的资源中的python源代码以了解更多信息。
split
(这也让我很反感),这里是python中的等价物
p=tuple(v.split(“|”)表示a中的v
,或者换句话说
(“idle | total”,…)->((idle,total),…)
我理解
在出现
a[1],a[2],
但不是
a[1,1]
除非您明确定义它,否则我看不到您这样做。对,因为
a[1]
的结果是
“idle | total”
(或者至少应该是这样,在bash不同意的情况下),我已经想尽一切办法将
A
创建为二维数组,但我找不到任何关于创建二维数组的内容,或者更糟糕的是,你甚至无法访问
A[n]
,因为我认为
A
是一个标量。