Как уже говорили другие, возможно, лучший способ top
. Он требует небольшой настройки и небольшого разбора, но вы можете получить его, чтобы получить текущее использование процессора в процентах.
top
распределяет загрузку процессора между пользователем, системными процессами и nice
процессами, нам нужна сумма трех. Итак, мы можем работать top
в b
режиме atch, который позволяет нам анализировать его вывод. Однако, как объяснено здесь , 1-я итерация top -b
возвращает проценты с момента загрузки, поэтому нам нужно как минимум две итерации ( -n 2
) для получения текущего процента. Чтобы ускорить процесс, вы можете установить значение d
elay между итерациями равным 0.01
. Наконец, вы grep
в строке, содержащей проценты ЦП, а затем используете gawk
для суммирования пользовательских, системных и хороших процессов:
top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
----- ------ ----------- --------- ----------------------
| | | | |------> add the values
| | | |--> keep only the 2nd iteration
| | |----------------> keep only the CPU use lines
| |----------------------------> set the delay between runs
|-----------------------------------> run twice in batch mode
Я думал, что вы также можете получить эту информацию ps -o pcpu ax
, добавив% использования каждого запущенного процесса. К сожалению, как объясняется здесь , ps
«возвращает процент времени, потраченного на выполнение в течение всего времени жизни процесса», что не является тем, что вам нужно.
РЕДАКТИРОВАТЬ
Исходя из вашего комментария, ваша версия top
отличается от моей, и вы должны использовать это вместо:
top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'
И, чтобы избежать проблем с локализацией, установите языковой стандарт C:
LC_ALL=C top -bn 2 -d 0.01 | grep '^Cpu.s.' | tail -n 1 | gawk '{print $2+$4+$6}'