Portál AbcLinuxu, 27. prosince 2025 18:54
top -b -n 1 -p "$mujprocespid"|grep "$mujprocespid" |awk '{ print $9 }'
Řešení dotazu:
Ja len ze ten grep je nepotrebny:
top -b -n 1 -p "$pid" | awk '/'"$pid"'/{ print $9 }'
Viem, ze si cakal viac, ale jednoduchsie ako to mas, to ja nepoznam.
Nic extra, ale aspon sa netreba spoliehat na 9. pole, co popravde aj mna napadlo este pred odoslanim prveho prispevku.
pid=""; while $(ps "$pid" &>/dev/null); do top -d 0.1 -b -n 1 -p "$pid" | awk '/'%CPU'/{for (i = 1; i <= NF; i++) ( $i ~ "%CPU") && field=i; getline; print $field;}'; done
-d parameter pre top si samozrejme nastav sam, hoc to, co potato spominal, bude zrejme viac davat realne vysledky.
#!/bin/bash
myprogram="ipolldevd"
pidmyprogram="$(pgrep -x $myprogram)"
choosecolumn="%CPU"
cpuloadmyprogram=$(top -b -n 1 -p "$pidmyprogram" | awk '
NR==FNR { for(i=1;i<=NF;i++) if ($i ~ "'"$choosecolumn"'") { nrcolumn=""i""; next }}
/'"$pidmyprogram"'/{ print $nrcolumn }')
echo $cpuloadmyprogram
Takže například přečíst jednou, počkat, přečíst podruhé, vydělit časovým intervalem a $(getconf CLK_TCK).Proč to ještě dělit getconf CLK_TCK? Nestačí jenom:
(přečíst_jednou - přečíst_podruhé)/časový_interval
#Total time spent for the process: total_time = utime + stime
#If we want to include the time from children processes:
#total_time = total_time + cutime + cstime
#cpu_usage = 100 * ((total_time / Hertz) / seconds)
#!/bin/bash
myprogram="ipolldevd"
pidmyprogram="$(pgrep -x $myprogram)"
seconds="5"
hertz="$(getconf CLK_TCK)"
cputime1=$(cat /proc/$pidmyprogram/stat | awk '{print "(" , $14, " + ", $15, ")"}' | bc)
sleep "$seconds"
cputime2=$(cat /proc/$pidmyprogram/stat | awk '{print "(" , $14, " + ", $15, ")"}' | bc)
cpuload=$(echo "100*(${cputime2} - ${cputime1})/$seconds/$hertz" | bc)
echo $cputime
Díky za radu s tím "getconf CLK_TCK". Podle tohoto "klíčového" slova se už na internetu zobrazí odkazy na měření zátěže CPU. Vyřešeno, díky.
#!/bin/bash
myprogram="ipolldevd"
pidmyprogram="$(pgrep -x $myprogram)"
seconds="2"
CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null)
START=`awk 'BEGIN {sum = 0} /^cpu /{ for (i = 1; i <= NF; ++i) { sum += $i } } END {print sum}' /proc/stat`
cputime1=$(cat /proc/$pidmyprogram/stat | awk '{print "(" , $14, " + ", $15, ")"}' | bc)
sleep "$seconds"
cputime2=$(cat /proc/$pidmyprogram/stat | awk '{print "(" , $14, " + ", $15, ")"}' | bc)
STOP=`awk 'BEGIN {sum = 0} /^cpu /{ for (i = 1; i <= NF; ++i) { sum += $i } } END {print sum}' /proc/stat`
cpuload=$(echo "${CORES} * 100 * (${cputime2} - ${cputime1})/(${STOP} - ${START})" | bc)
echo "Celkova zatez programu = $cpuload procent"
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.