Показать пять лучших процессорных процессов с `ps`

102

Как показать топ-5 процессов, потребляющих процессор, с помощью ps?

PlanasB
источник

Ответы:

95

Зачем использовать, psкогда вы можете сделать это легко с помощью topкоманды?

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

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

Если вы хотите что-то действительно «топовое» с постоянными обновлениями, используйте watch

watch "ps aux | sort -nrk 3,3 | head -n 5"
Бобан П.
источник
3
PS Aux | сортировка -к 3,3 | tail -n 5 ;-)
PlanasB
1
было бы хорошо включить числовую сортировку, чтобы пропустить заголовок ps aux. ps aux | sort -nrk 3,3 | head -n 5
syss
1
это порождает много процессов, которые более ресурсоемки и также более склонны к состоянию гонки, потому что, когда переданные по трубопроводу данные приходят в голову, список процессов может уже измениться
phuclv
Это правда @ LưuVĩnhPhúc, но мне интересно, как это отличается от того, как на topсамом деле работает.
ледяная вода
1
@icedwater topчитает список процессов и самостоятельно отображает результат, не
отправляя
87

Правильный ответ :

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

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

Пример:

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

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

ps -Ao user,uid,comm,pid,pcpu,tty -r | head -n 6
Факундо Виктор
источник
3
Это правильный ответ. Спасибо Факундо. Я пытался объяснить другим, что вы можете использовать sort и pipe, но ps также имеет встроенную опцию для сортировки, и теперь я вижу, что вы также используете это, и это здорово.
Луис Альварадо
Вторая команда кажется более полезной ... но первая, кажется, показывает bash(x2 или headтоже) ps...
Уилф
3
@Wilf Первый предназначен для выделения способов сортировки по потреблению процессора без использования команды sort, второй показывает, как указывать столбцы, не мешая сортировке. Объясняя что-то .. всегда лучше быть кратким и объяснять одну вещь за один раз.
Факундо Виктор
28

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

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, USER, COMMAND)

Райан Хоррисбергер
источник
22

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

Если у вас есть GNU-Top, попробуйте использовать его в пакетном режиме, чтобы выложить список процессов, отсортированный по использованию процессора, и использовать head / tail, чтобы получить верхние 5 строк (первые 8 - заголовки):

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

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

Калеб
источник
1
В OS X top -o cpu -n 5это способ достижения того же самого. Кто-нибудь знает? Мой topотличается от вашего top.
Boehj
Вы тот, у кого другая вершина, так что вы сможете сказать. Мой топ не имеет -oи -nустанавливает количество обновлений дисплея перед выходом.
Калеб
Справедливо. Я получу коробку с Linux сегодня днем ​​и посмотрю. У моего top, похоже, нет пакетного режима, который довольно ограничен. Должен быть какой-то способ проникновения topв другие команды. Я сделаю некоторые исследования.
Boehj
Я упомянул в своем ответе пакетный режим, но на самом деле он не нужен моему топу, поскольку он автоматически определяет, что является частью конвейера, а не интерактивного сеанса. Вы пытались просто обвести это без этого?
Калеб
1
Сделаю. GNU topработал так, как описано во второй половине дня. Приветствия.
Boehj
6

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

ps aux k-pcpu | head -6
Нестор Уркиса
источник
5

Обратите внимание, что текущие версии ps имеют возможность сортировки внутри них на основе кодов полей (приведенных на странице руководства ps). Код поля для использования процессора - «с». Вы можете использовать --sort cв конце команды PS, например:ps aux --sort c

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

Cian D
источник
4

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

ps auxk-c | head -6

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

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

Вы можете добавить больше спецификаторов разделенных ,, другие возможные спецификаторы: %mem, args, bsdstart, pid, gid, uid... , которые вы можете найти полный список в стандартном формате спецификаторы разделе страницы человека. Например:

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

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

2i3r
источник
3

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

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

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

$ man ps
Кристофер Джеймс Мортон
источник
0

topв Mac OS X есть опция режима регистрации в форме top -l numberOfSamples(которая, кажется, эквивалентна пакетному режиму GNU top). Однако необходимо иметь как минимум две выборки, поскольку «для первой отображаемой выборки будет отображаться неверный% ЦП для каждого процесса, так как он рассчитывается с использованием разницы между выборками» ( 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
Ulf
источник
0

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

PSN
источник
0

Я считаю, что самый простой способ увидеть процесс загрузки 5 лучших процессоров -

ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 5

Чтобы увидеть топ 5 процесс потребления памяти ,

ps -eo pid,comm,%cpu,%mem --sort=-%mem | head -n 5

Где,

-e : Этот флаг используется для выбора всего процесса

-o : Этот флаг используется для форматирования как пользовательский.

pid : Этот аргумент используется для показа pid

comm: Этот аргумент используется только для отображения имени команды. Чтобы получить полное использование команды args, cmdилиcommand

%cpu: Этот аргумент показывает процент использования процессором процессора в формате "##. #". Здесь pcpuтакже можно использовать.

%mem: Этот аргумент показывает отношение размера резидентного набора процесса к физической памяти на машине, выраженное в процентах. Здесь pmemтакже можно использовать.

--sort: Укажите порядок сортировки. После знак используется для сортировки наибольшее значение в вершине , где параметр по умолчанию , который должен перечислить все большее численное заказ [т.е. от 0 до п].=-+

Магомет
источник
-2

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

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

jshedler
источник