Покажите лучшие пять потребляющих процессов ЦП с 'PS'

Добавьте следующее к ~/.bashrc

# Avoid duplicates
HISTCONTROL=ignoredups:erasedups  
# When the shell exits, append to the history file instead of overwriting it
shopt -s histappend

# After each command, append to the history file and reread it
PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
109
28.05.2011, 21:19
12 ответов

Почему использование ps когда можно сделать это легко с top команда?

Если необходимо использовать ps, попробуйте это:

ps aux | sort -nrk 3,3 | head -n 5

Если Вы хотите что-то, что это действительно 'top'esq с постоянными обновлениями, используйте часы

watch "ps aux | sort -nrk 3,3 | head -n 5"
105
27.01.2020, 19:29
  • 1
    ps aux | вид-k 3,3 | хвост-n 5 ;-) –  PlanasB 28.05.2011, 22:01
  • 2
    будет хорошо включать числовой вид, пропустить заголовок PS aux. ps aux | sort -nrk 3,3 | head -n 5 –  syss 12.05.2016, 13:42
  • 3
    это порождает много процессов, который является большим количеством потребления ресурса и также более подвержен состоянию состязания, потому что, когда переданные по каналу данные прибывают для заголовка списка процессов, возможно, уже изменил –  phuclv 12.06.2017, 12:20
  • 4
    Это - истинный @LưuVĩnhPhúc, но интересно, как это отличается от как top на самом деле работы. –  icedwater 15.06.2017, 05:50
  • 5
    @icedwater top читает список процессов, и отобразите результат самостоятельно, не передавая по каналу ни к какому другому процессу –  phuclv 15.06.2017, 06:16

Я не думаю ps то, что Вы ищете. Вы посмотрели на вывод от top?

Если у Вас есть Вершина GNU, попытайтесь использовать, это - пакетный режим для выкладывания списка процессов, отсортированного по использованию CPU, и использующий голову/хвост для получения лучшие 5 строк (первые 8 являются заголовками):

top -b -n 1 | head -n 12  | tail -n 5

Вершина BSD, кажется, ведет себя по-другому и не имеет неинтерактивного режима, так используйте один из другого ps основанные решения.

22
27.01.2020, 19:29
  • 1
    В OS X, top -o cpu -n 5 способ достигнуть того же самого. Кто-либо знает? Мой top отличается от Вашего top. –  boehj 29.05.2011, 07:00
  • 2
    Вы - тот с другой вершиной, таким образом, Вы имели бы возможность говорить. Моя вершина не имеет -o и -n устанавливает количество раз, оно обновляет дисплей перед выходом. –  Caleb 29.05.2011, 08:28
  • 3
    Достаточно ярмарка. Я буду входить в поле Linux этим днем и смотреть. Мой top кажется, не имеет пакетный режим, который вполне ограничивает. Должен быть некоторый способ передать по каналу top в другие команды. Я проведу некоторое исследование. –  boehj 29.05.2011, 08:45
  • 4
    я упомянул переключатель пакетного режима в своем ответе, но это является на самом деле ненужным для моей вершины, потому что он автоматически обнаруживает быть частью канала вместо интерактивной сессии. Вы пытались просто передать его по каналу без этого? –  Caleb 29.05.2011, 08:56
  • 5
    Сделает. GNU top работавший, как описано этим днем.Удачи. –  boehj 29.05.2011, 15:05

В зависимости от Ваших потребностей можно найти это немного более читаемым:

ps -eo pcpu,pid,user,args --no-headers| sort -t. -nk1,2 -k4,4 -r |head -n 5

демонстрационный вывод:

 1.3     4 root     [ksoftirqd/0]
 1.1     9 root     [ksoftirqd/1]
 1.0 17606 nobody   /usr/sbin/gmetad
 1.0    13 root     [ksoftirqd/2]
 0.3 17401 nobody   /usr/sbin/gmond

(поля являются %CPU, PID, ПОЛЬЗОВАТЕЛЕМ, КОМАНДОЙ),

28
27.01.2020, 19:29

top на Mac OS X имеет регистрирующуюся опцию режима в форме top -l numberOfSamples (который, кажется, эквивалент пакетному режиму GNU top). Необходимо, тем не менее, иметь по крайней мере два образца, потому что "первому отображенному образцу отобразят недопустимый %CPU для каждого процесса, поскольку это вычисляется с помощью дельты между образцами" (man 1 top).

# examples
top -o cpu -l 2 -n 5 | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu | tail -n 6
top -o cpu -l 2 -n 5 -stats pid,command,cpu -U $(logname) | tail -n 6
0
27.01.2020, 19:29
[1187141] Обратите внимание, что в текущих версиях ps есть возможность сортировки по кодам полей (приведенным в man-странице ps). Код поля для использования процессора - "c". Вы можете использовать [1187499] --sort c[1187500] в конце команды ps, например, [1187501]ps aux --sort c

Это поставит процесс, использующий наибольшее количество процессоров, в нижнюю часть списка. Обратный порядок списка путем добавления минуса к коду поля, используемого для сортировки, например, [1187503]ps aux --sort -c

5
27.01.2020, 19:29

Правильным ответом будет:

ps --sort=-pcpu | head -n 6

Таким образом, можно указывать столбцы, не мешая сортировке.

Ex:

ps -Ao user,uid,comm,pid,pcpu,tty --sort=-pcpu | head -n 6

Примечание для MAC OS X: В Mac OS X, ps не распознает -сортировку, но предлагает -r сортировать по текущему использованию процессора. Таким образом, для Mac OS X можно использовать:

ps -Ao user,uid,comm,pid,pcpu,tty -r | head -n 6
91
27.01.2020, 19:29

Утилита командной строки ps имеет свой вариант сортировки, поэтому я предпочитаю:

$ ps -eo pcpu,args --sort=-%cpu | head

Вы можете добавлять нужные вам столбцы. Посмотрите, какие еще опции доступны на странице ps.

$ man ps
3
27.01.2020, 19:29

Самый быстрый лайнер, который я нашел для этого (примечание 6, потому что заголовок складывается):

ps aux k-pcpu | head -6
6
27.01.2020, 19:29

Неясно, какое именно измерение буфера текста является слишком большим для ConSpy ( stty --all или около того не предоставлено), поэтому рекомендации относительно количества строк текста и cpl следуют.

Для консоли TUI существуют различные параметры:

  • режим видео (т. е. сколько строк сканирования × ширина экрана (в точках));
  • сколько символьных полей (т. е. текстовые строки × cpl).

Как правило:
текстовые строки = строки сканирования/высота символов
cpl = ширина экрана (в точках )/ширина символа
Высота и ширина символов в точках. Деление - целое число, где остаток отбрасывается.

Чтобы уменьшить количество текстовых строк, загрузите шрифт с большей высотой символов. Чтобы уменьшить cpl (символы на строку), загрузите шрифт с шириной 12 или более символов. Например:

 setfont /usr/share/consolefonts/Uni3-TerminusBold24x12.psf.gz

(хотя IMHO Terminus во многом безобразен).

На Ubuntu может быть создан пользовательский скрипт /etc/init/console-setup.conf для выполнения при загрузке. А именно, вместо

exec loadkeys /etc/console-setup/cached.kmap.gz

можно записать

script
    setfont /usr/share/consolefonts/Uni3-TerminusBold24x12.psf.gz
    loadkeys /etc/console-setup/cached.kmap.gz
end script

Обратите внимание, что файл cached.kmap.gz является (keymap) и не мешает шрифтам. Нет необходимости выполнять setfont , а именно из «console-setup.conf». Из-за значения термина «консоль» этот выбор кажется логичным.
Обновление: В Ubuntu существует задача /etc/init/console-font.conf .

Или прочитайте этот материал в Ask Ubuntu , возможно, найдет что-то полезное.

В большинстве приведенных выше рекомендаций предполагается, что драйвер framebuffer ( fbdev ) включен. Также в этом случае команда fbset без аргументов (или sudo fbset из оболочки пользователя) сообщает геометрию текущего видео режима, как
геометрия screen _ width scan _ lines ...

В аппаратном VGA-подобном режиме , устаревшем в современных Linuxes, максимальная ширина символа равна 9. Таким образом, можно уменьшить cpl (символы на строку) только путем включения нестандартной (уменьшенной) ширины экрана, следовательно, нестандартный режим с уменьшенной тактовой частотой пикселя. Это не всегда возможно и безопасно.


Еще одна заметка о текстовых строках × cpl на виртуальных консолях Linux. Эти значения можно получить с помощью
sudo od -t u1 -N 2/dev/vcsa number
Первое десятичное число - текстовые строки, а второе - cpl. Для получения пояснений по работе см. vcs (4) и od (1).

-121--108254-

sh загружает только .profile , если это оболочка входа , т.е. если она вызывается с аргументом 0, начинающимся с - . Если вы не хотите, чтобы /etc/profile и ~/.profile считывались, вызовите оболочку с аргументом по умолчанию 0 (имя исполняемого файла).

Если оболочка выполняется как оболочка входа, вы не можете управлять аргументами. Если нет, оболочка не является оболочкой входа.

Помимо файлов, которые загружаются, если оболочка является оболочкой входа в систему, существует еще один файл, который загружают некоторые реализации sh : файл, указанный в переменной среды ENV . Если вы вызываете оболочку и не хотите загружать файл, убедитесь, что ENV не установлен.

-121--289428-

top -bn1 | sed -n '7,12' p также работает как хороший маленький лайнер.
Хотя я предпочитаю использовать ps с --sort = X -o X, Y, Z

, используя ps, вы можете вытащить различные stats grep для пользователя процесса ИЛИ, а затем суммировать ИЛИ avg их с трубой, чтобы пробудиться.

-2
27.01.2020, 19:29

top покажет, что использует ваш процессор. Если он у вас установлен, htop позволяет вам более детально управлять, включая фильтрацию - в вашем случае - CPU.

0
27.01.2020, 19:29

Чтобы добавить балл к другим ценным ответам, я предпочитаю:

ps auxk-c | head -6

Он также печатает заголовок, что приятно.

Здесь k идентично --sort, а c указывает использование ЦП (псевдоним %cpu) для сортировки, а - для обратной сортировки.

Вы можете добавить дополнительные спецификаторы, разделенные ,, другие возможные спецификаторы: %mem, args, bsdstart, pid, gid, uid ... полный список которых вы можете найти в разделе СТАНДАРТНЫЕ СПЕЦИФИКАТОРЫ ФОРМАТА страницы руководства. Например:

 ps auxk -gid,-%mem | head -11

напечатает 10 процессов с наивысшим идентификатором группы, отсортированных внутри по использованию памяти.

7
27.01.2020, 19:29

Вот кое-что, что я придумал, так как нашел первоначальный ответ слишком загадочным. Итак, для голых костей введите

ps -e -o pid,cmd,%cpu,%mem --sort=-%cpu | head -n 6

Давайте разберемся, что делает каждый. psконечно показывает моментальный снимок текущих процессов. -eпоказывает, что каждый процесс в системе -oдолжен определить формат, в котором мы хотим получить результат, как вы можете видеть, мы указали формат как pid,cmd,%cpu,%mem, следующий --sort, конечно, сортирует . Здесь важно отметить один важный момент: по умолчанию он сортируется по возрастанию. Также --sortнужен параметр для сортировки, который мы предоставляем -%cpuобратите внимание на -это так, что он сортирует по убыванию , и мы сначала получаем максимальную загрузку ЦП. Затем мы передаем это в head -n 6, что дает нам this

    PID CMD                         %CPU %MEM
   5995 transmission-gtk             5.1  1.3
 402083 /usr/lib64/firefox/firefox   4.2  6.7
 978875 /usr/lib64/firefox/firefox   3.6  4.0
   2982 /usr/bin/gnome-shell         2.7  3.0
   2774 /usr/libexec/Xorg vt2 -disp  1.9  1.0

Теперь, когда мы поняли основы, мы можем немного похвастаться. Например, вы можете использовать watchдля обновления списка каждые 2 секунды, например

watch "ps -e -o pid,cmd,%cpu,%mem --sort=-%cpu | head -n 6"

Или, для чего-то более интересного, вы можете установить пакет python под названием tabulate, ввести его в свой терминал pip install tabulate, теперь вы действительно можете похвастаться, используя некоторые sedфу и т. д.

 ps -e -o pid,cmd,%cpu,%mem --sort=-%cpu | head -n 5 | tabulate -1 -f github | cut -f 2- -d "|" | sed '2s/----/    /' 

который дает этот прекрасный результат-

    |    PID | CMD                        |   %CPU |   %MEM |
    |--------|----------------------------|--------|--------|
    |   5995 | transmission-gtk           |    5.1 |    1.3 |
    | 978875 | /usr/lib64/firefox/firefox |    4.5 |    4.1 |
    | 402083 | /usr/lib64/firefox/firefox |    4.2 |    6.7 |
    |   2982 | /usr/bin/gnome-shell       |    2.7 |    3   |

для простоты использования и для того, чтобы не вводить эту команду снова и снова, вы можете aliasих ввести в свой .bashrcвот так

alias top5="ps -e -o pid,cmd,%cpu,%mem --sort=-%cpu | head -n 6"

после выполнения source.bashrcвы можете просто ввести top5. Или вы можете просто использовать htopи сортировать по %CPUhtop также позволяет убивать процессы и многое другое.

2
25.05.2020, 19:01

Теги

Похожие вопросы