Я знаю, что этот вопрос задавался много раз, но, к сожалению, ни один из приведенных ответов не работает для того, что мне нужно.
Кажется, что все рекомендуют /proc/stat
, однако я не могу найдите 1 ответ, который работает, как и ожидалось:

, как вы можете видеть здесь, отчеты по ядру 0 используются на 16%, хотя фактически они используются только на 3%, на самом деле не имеет значения, если это 100%, он по-прежнему сообщает о 16% с увеличением только на 0,01% -0,02%
Я также протестировал другой подход только с $2+$4 +$5
, а не со всем диапазоном, но даже этот результат дал неточные результаты ...
Как мониторы ЦП, как и приведенный выше график, получают свою информацию ??
, потому что она не проходит через /proc/stat
, если все не делают что-то не так.
Заметные ресурсы:
Я просмотрел гораздо больше, но все они в значительной степени указывают на одно и то же.
Что касается сценария, я знаю, что он немного грязный, я не работаю с bash много, но вот оно:
#!/bin/bash
H=($(awk '/MHz/{printf "%.2fGHz|", $4/1000}' /proc/cpuinfo))
A=($(awk 'FNR>1 && FNR<4 {
i=$5+$6; printf "%d|%d\n", i, i+$2+$3+$4+$7+$8+$9
}' /proc/stat))
sleep 0.125
awk -v a="${A[*]}" -v h="${H[*]}" -v n="0" 'FNR>1 && FNR<4 {
n++
split(h,s,"|"); split(a,p,"|")
i=$5+$6; t=(i+$2+$3+$4+$7+$8+$9)-p[n,1]
printf "%s: %s %.2f%\n", $1, s[n], ((t-(i-p[n,0]))/t)*100
}' /proc/stat
в значительной степени все это следовало из других ответов ...
Если есть лучший способ сделать что-либо из этого (например, объединение cpuinfo
с stat
, или необязательное разделение массива, чтобы исключить s[n]
сообщение о скалярной ошибке, или даже спящий и перечитывание в awk), во что бы то ни стало, пожалуйста, улучшите. :)