簡體   English   中英

Linux-將單個進程的核心利用率提取到文件

[英]Linux - Extract core utilization for a single process to a file

我試圖弄清楚如何為Linux中的單個進程提取cpu核心利用率並對其進行解析。 我知道我可以先獲得總體核心利用率,然后按“ 1”。 我已經能夠解析。 但是,現在我想對單個過程執行相同的操作。 我用ps嘗試了一下,然后自己計算了核心利用率,但是我不確定我的腳本是否足夠准確,似乎有些問題。 (請注意,由於該版本是WIP,因此該版本會計算總體內核利用率)一段時間后,我在終端中收到如下錯誤:

test.sh:第31行:+:語法錯誤:預期的操作數(錯誤標記為“ +”)

我不知道為什么這個錯誤只是隨機發生。

#!/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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM