Portál AbcLinuxu, 8. května 2025 02:11
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 $cputimeDí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.