Я хочу увидеть загрузку процессора.
Я использовал эту команду :
top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}'
Но он возвращает 100%.
Каков правильный способ?
Попробуй пройти бота-учителя. Он научит тебя Linux в виде игры: Курсы Linux и DevOPS Бесплатный урок
Почему бы не использовать htop
[интерактивный просмотрщик процессов]? Чтобы установить его, откройте окно терминала и введите:
sudo apt-get install htop
Также смотрите man htop
для получения дополнительной информации и о том, как его настроить.


Чтобы получить информацию о загрузке процессора, лучше всего прочитать файл /proc/stat. Видеть man 5 proc
за дополнительной помощью.
Я нашел полезный сценарий, написанный Полом Колби здесь
#!/bin/bash# by Paul Colby (http://colby.id.au), no rights reserved ;)PREV_TOTAL=0PREV_IDLE=0while true; do CPU=(`cat /proc/stat | grep '^cpu '`) # Get the total CPU statistics. unset CPU[0] # Discard the "cpu" prefix. IDLE=${CPU[4]} # Get the idle CPU time. # Calculate the total CPU time. TOTAL=0 for VALUE in "${CPU[@]:0:4}"; do let "TOTAL=$TOTAL+$VALUE" done # Calculate the CPU usage since we last checked. let "DIFF_IDLE=$IDLE-$PREV_IDLE" let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL" let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10" echo -en "\rCPU: $DIFF_USAGE% \b\b" # Remember the total and idle CPU times for the next check. PREV_TOTAL="$TOTAL" PREV_IDLE="$IDLE" # Wait before checking again. sleep 1done
сохраните его в cpu_usage
, добавить разрешение на выполнение chmod +x cpu_usage
и бежать:
./cpu_usage
чтобы остановить сценарий, нажмите Ctrl+c
Я нашел решение, которое хорошо работает, вот оно:
top -bn2 | grep '%Cpu' | tail -1 | grep -P '(....|...) id,'
Я не уверен, но мне кажется, что первая итерация top
с -n
параметр возвращает некоторые фиктивные данные, всегда одни и те же во всех моих тестах.
Если я использую -n2
тогда второй кадр всегда является динамическим. Таким образом, последовательность такова:
- Получите 2 первых кадра сверху:
top -bn2
- Затем из этих кадров берутся только строки, содержащие "%Cpu":
grep '%Cpu'
- Затем возьмите только последнее вхождение / строку: `tail -1`
- Затем получите значение idle (содержит 4 или 5 символов, пробел, "id").:
grep -P '(....|...) id,'
Надеюсь, это поможет, Пол

Попробуй пройти бота-учителя. Он научит тебя Linux в виде игры: Курсы Linux и DevOPS Бесплатный урок