Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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 计算bash中每个进程的CPU使用率%_Linux_Bash_Process - Fatal编程技术网

Linux 计算bash中每个进程的CPU使用率%

Linux 计算bash中每个进程的CPU使用率%,linux,bash,process,Linux,Bash,Process,我正在计算每个进程的CPU使用率%,并使用以下脚本进行计算: #!/bin/bash function getTotalTime() { echo $(awk '{print $14+$15}' /proc/${1}/stat) } function getStartTime() { echo $(awk '{print $22}' /proc/${1}/stat) } function getActualCPUTime() { echo $(cat /proc/s

我正在计算每个进程的CPU使用率%,并使用以下脚本进行计算:

#!/bin/bash

function getTotalTime() {
    echo $(awk '{print $14+$15}' /proc/${1}/stat)
}

function getStartTime() {
    echo $(awk '{print $22}' /proc/${1}/stat)
}

function getActualCPUTime() {
    echo $(cat /proc/stat | awk '/cpu / {for(i=1;i<=7;++i) sum+=$i; print sum}')
}

pidArray=($(ls -l /proc | awk '$9 ~/^[0-9]+/ {print $9}'))
let index=0

for i in ${!pidArray[*]}
do
    if [ ! -z ${pidArray[$i]} ] && [ -e "/proc/${pidArray[$i]}/stat" ]
    then
        cpuP[$index]=$(getTotalTime ${pidArray[$i]})
        let index+=1
    fi
done

cpuT=$(getActualCPUTime)
sleep 1
#hz=$(getconf CLK_TCK)
cpuT=$((($(getActualCPUTime)-$cpuT)))
#uptime=$(cat /proc/uptime | awk '{print $1}')

let index=0
for i in ${!pidArray[*]}
do
    if [ ! -z ${pidArray[$i]} ] && [ -e "/proc/${pidArray[$i]}/stat" ]
    then        
        #aux=$(($(getTotalTime ${pidArray[$i]})-${cpuP[$index]}))
        #echo "$aux ->  $cpuT"
        cpuP[$index]=$((100*($(getTotalTime ${pidArray[$i]})-${cpuP[$index]})/$cpuT))


        echo ${cpuP[$index]}
        let index+=1 
    fi  
done
#/bin/bash
函数getTotalTime(){
echo$(awk'{print$14+$15}'/proc/${1}/stat)
}
函数getStartTime(){
echo$(awk'{print$22}'/proc/${1}/stat)
}
函数getActualPutime(){

echo$(cat/proc/stat | awk'/cpu/{for(i=1;i我设法解决了它,问题是读取值的顺序

在我阅读之前

进程,cpu,睡眠,cpu,进程

正确的方法是

cpu,进程,睡眠,cpu,进程


这就是cpu值太小的原因,我在一些进程中得到了150%。

当我在动力不足的笔记本电脑上使用13%的cpu时,我看到ksh;-(.所以>75%的cpu似乎是可疑的..你验证了你所有的数学运算了吗(我没有;-)你也知道“代码>顶部<代码>和其他100个系统监视工具吗?我认为你把它当作一个挑战,而不是作为一个真正的工具。如果你是,那么考虑重新启动的过程中有很多更少的子进程。我认为大多数的引用为代码> /PRO/$ { 1 }。/stat
可以归结为一次调用
awk
。祝你好运。@Sheller这是一个挑战,操作是正确的(我在各自的文件中检查了它们,并用计算器计算了它们)问题是,它说进程X已经完成了150次时钟滴答声,而另一个文件说时钟滴答声已经达到100次,但显然有一些地方出了问题,这里有一些想法供您参考(我要提醒您,我的知识还不多;-)……但首先,对于%CPU,时钟滴答声?这两个想法似乎不同(如果仍然相关的话)。我现在无法研究在
/proc/PID/stat
下显示的内容。另一个想法是,您看到的差异可能与调度程序(不完全是正确的术语)如何分配时间有关。如果让它运行更长时间,您可能会看到它们平衡。祝您好运。