리눅스에서 단일 프로세스의 CPU 코어 활용률을 추출하고 구문 분석하는 방법을 알아 내려고합니다. 나는 top을 통해 전반적인 핵심 활용도를 얻은 다음 "1"을 누를 수 있음을 안다. 나는 이미 그것을 파싱 할 수있다. 그러나 이제는 단일 프로세스에 대해 동일한 작업을 수행하려고합니다. 나는 ps로 시도하고 코어 활용도를 스스로 계산하지만 내 스크립트가 충분히 정확하다면 뭔가 확신이 들지 않는다. 이 오류가 단지 무작위로 발생하는 이유리눅스 - 하나의 프로세스에 대한 코어 활용을 파일로 추출
test.sh: line 31: +: syntax error: operand expected (error token is "+")
내가 알아낼 수 없습니다 : 내 터미널에서 잠시 후이 같은 오류를 얻을 (이 WIP 때문에이 버전은 전체의 핵심 활용도를 계산합니다).
#!/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 사용률을 얻을 수있는 실제 요청을 보면 어떤 조언
'bash -x'를 사용하여 스크립트를 실행하여 오류의 원인을 확인하십시오. – konsolebox