Вот написал скрипт на одном awk:
cpu_load.awk
#!/usr/bin/awk -f
function get_cpu_times() {
while((getline l < "/proc/stat") > 0) {
if(l~/^cpu /) {
close("/proc/stat")
$0 = l
idle = $5
total = $2+$3+$4+$5+$6+$7+$8+$9+$10+$11
diff_idle = idle-prev_idle
diff_total = total-prev_total
return idle total diff_idle diff_total
}
}
}
function calc_cpu_load_prcnt() {
get_cpu_times()
prev_idle = idle
prev_total = total
system("sleep 1")
get_cpu_times()
load = (1000*(diff_total-diff_idle)/diff_total+5)/10
return load
}
BEGIN{
if(ARGC==1){calc_cpu_load_prcnt();printf "%.0f\n",load; exit}
if(ARGC==2 && ARGV[1]=="m"){for(;;){calc_cpu_load_prcnt();printf "\r%.1f %% ",load}}
}
Показывает у меня правильно, работает быстро.
Вызванный без параметра, скрипт возвращает целое число значения загрузки CPU в процентах.
С параметром "m" - монитор загрузки CPU с интервалом 1сек.
Запуск:
./cpu_load.awk
или
awk -f cpu_load.awk
Добавить права на исполнение:
chmod +x cpu_load.awk
Получение значения загрузки CPU в переменную sh/bash:
load=$(awk -f cpu_load.awk)
или
load=$(awk -f "/путь/до/скрипта/cpu_load.awk")