Для того, чтобы получить загрузку процессора в процентах за интервал времени:
1. В начале интервала считываем первые 4 числа из строки /proc/stat:
а. если конкретного процессора - то соответствующая строка в stat, начинающаяся с cpu\d
б. если среднюю по всем процессорам - то верхняя строка в stat, начинающаяся с cpu
Получаем U0, N0, S0, I0
2. В конце интервала повторяем операцию, получаем U1, N1, S1, I1
3. Вычисляем разности
Ud = U1 - U0
Nd = N1 - N0
Sd = S1 - S0
Id = I1 - I0
4. Вычисляем сумму разностей:
Total = Ud + Nd + Sd + Id
5. Вычисляем среднюю загрузку за интервал времени:
avg_load = 100% * (Ud + Nd + Sd)/Total
Вот пример кода на С:
/* determine average cpu load */
stat = fopen("/proc/stat", "r");
if(!stat) {
syslog(LOG_ERR, "Stat open failed!");
exit(0);
}