gpt4 book ai didi

Linux - 将单个进程的核心利用率提取到文件中

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:23 25 4
gpt4 key购买 nike

我试图弄清楚如何提取 Linux 中单个进程的 cpu 核心利用率并解析它。我知道我可以通过 top 获取总体核心利用率,然后按“1”。我已经能够解析它了。但是,现在我想对单个进程做同样的事情。我尝试使用 ps 并自己计算核心利用率,但我不太确定我的脚本是否足够准确,似乎有些问题。 (请注意,此版本计算总体核心利用率,因为它是 WIP)一段时间后,我在终端中收到如下错误:

test.sh: line 31: +: syntax error: operand expected (error token is "+")

我不明白为什么这个错误会随机发生。

#!/bin/env bash
read -p "Enter PID to observe:" pid
run=false
ps -p $pid -L -o cputime,etime,psr,pcpu

for (( u = 1 ; u <= 100 ; u++ ))
do

lines=$(ps -p $pid -L -o psr,pcpu | awk 'END{print NR}')


for (( i=1; i<=$lines; i++))
do


core=$(ps -p $pid -L -o psr,pcpu | awk 'NR=='$i'{print $1}')

if [ $run == false ]

then cpuTimeS=+$(ps -p $pid -L -o cputime,etime | awk 'NR=='$i'{print $1}' | awk -F : '{ printf("%.2f\n", $1*60+$2*60+$3); }')
elapsedTimeS=+$(ps -p $pid -L -o cputime,etime | awk 'NR=='$i'{print $2}' | awk -F : '{ printf("%.2f\n", $1*60+$2*60+$3); }')

cpuTimeSi=${cpuTimeS%.*}
elapsedTimeSi=${elapsedTimeS%.*}

cpuTimeSiResult=$(( cpuTimeSi + cpuTimeSiResult ))
elapsedTimeSiResult=$(( elapsedTimeSi + elapsedTimeSiResult ))

else
cpuTimeE=+$(ps -p $pid -L -o cputime,etime | awk 'NR=='$i'{print $1}' | awk -F : '{ printf("%.2f\n", $1*60+$2*60+$3); }')
elapsedTimeE=+$(ps -p $pid -L -o cputime,etime | awk 'NR=='$i'{print $2}' | awk -F : '{ printf("%.2f\n", $1*60+$2*60+$3); }')

cpuTimeEi=${cpuTimeE%.*}
elapsedTimeEi=${elapsedTimeE%.*}

cpuTimeEiResult=$(( cpuTimeEi + cpuTimeEiResult ))
elapsedTimeEiResult=$(( elapsedTimeEi + elapsedTimeEiResult ))

fi
done

if [ "$run" = true ]

then result=$( echo "scale=2; ($cpuTimeEiResult - $cpuTimeSiResult) / ($elapsedTimeEiResult - $elapsedTimeSiResult) * 100.0" | bc)
echo "RESULT:" $result
echo "cpuTimeSTART:" $cpuTimeSiResult
echo "elapsedTimeSTART:" $elapsedTimeSiResult
echo "cpuTimeEND:" $cpuTimeEiResult
echo "elapsedTimeEND:" $elapsedTimeEiResult

fi

sleep 1

if [ "$run" = false ]
then run=true
else
run=false
fi



done

有什么想法可以更好地解决这个问题吗?

我很高兴收到任何建议

最佳答案

查看您的实际请求以获取特定进程的 CPU 利用率;这可以用更少的行来完成;例如下面是发出 seq 命令后的 CPU 使用情况。

#using the process name
$ ps -C seq -o %cpu
%CPU
10.4

#using the process id
$ ps -p 5710 -o %cpu
%CPU
10.4

关于Linux - 将单个进程的核心利用率提取到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24929520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com