Как уже говорили другие, лучший способ, вероятно, top
. Он требует небольшой настройки и небольшого разбора, но вы можете получить его, чтобы получить текущее использование процессора в процентах.
top
распределяет загрузку процессора между пользователем, системными процессами и nice
процессами, нам нужна сумма из трех. Таким образом, мы можем запустить top
в режиме ATCH b
, что позволяет нам анализировать свою продукцию. Однако, как объяснено здесь , 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}'