Битлента
Сетевые команды и утилиты5 мин чтения·

ps aux: как найти процесс, отфильтровать список и отсортировать по нагрузке

Как читать ps aux, искать процесс через grep без самого grep, сортировать по CPU и памяти в Linux и macOS, выбирать пользователя и PID.

Кратко

ps aux печатает все процессы с пользователем, долей CPU и памяти. Поиск: ps aux | grep -v grep | grep имя. Сортировка по CPU в Linux: ps aux --sort=-%cpu | head, в macOS: ps aux -r | head. Для одного пользователя и PID есть ключи -U и -p.

Что выводит ps aux и откуда в нём столько столбцов

Команда ps делает снимок процессов на момент запуска. В отличие от top она не обновляется, и поэтому подходит для скриптов и для фильтрации. Запись ps aux объединяет три ключа в стиле BSD: a показывает процессы всех пользователей, u добавляет формат с владельцем и ресурсами, x включает процессы без управляющего терминала, то есть службы. Именно эта форма работает и в Linux, и в macOS.

Столбцы вывода: USER (владелец), PID, %CPU, %MEM, VSZ (виртуальный размер), RSS (занятая в оперативной памяти часть), TTY, STAT (состояние), START (время запуска), TIME (накопленное процессорное время) и COMMAND. Условная строка: пользователь root, PID 1, небольшие доли CPU и памяти, команда системного менеджера служб.

Не путайте %CPU у ps с мгновенной загрузкой. В Linux это отношение процессорного времени процесса ко времени его жизни (в macOS способ усреднения другой), поэтому давно работающий процесс, который сейчас нагружает процессор, может отображаться со скромным значением. Для мгновенной картины используйте top или несколько снимков подряд.

Поиск процесса по имени и проблема строки grep

Самый частый запрос: есть ли такой процесс. Вариант ps aux | grep имя работает, но в выводе появится и сама команда grep, ведь её строка тоже содержит искомое слово. Есть несколько способов убрать лишнее.

  • ps aux | grep -v grep | grep имя убирает строки со словом grep.
  • Приём с квадратными скобками: если первую букву шаблона взять в скобки, например grep "[n]ginx", шаблон совпадает со словом nginx, но не совпадает со своей собственной строкой.
  • pgrep имя находит номера процессов без этих сложностей, подробнее на отдельной странице про pgrep.
  • ps -C имя в Linux отбирает процессы по точному имени команды.

Обратите внимание, что grep по ps aux ищет в том числе и аргументы командной строки. Поэтому слово из пути или параметра может дать лишние совпадения. Если нужно точное имя, сравнивайте узко: через awk по конкретному столбцу, см. страницу про awk '{print $1}'.

Если искомый процесс не найден, это не всегда значит, что он не запущен: он мог завершиться, либо работать под другим именем, либо принадлежать другому пользователю, который виден только при ps aux, но не при ps без ключей.

Сортировка по процессору и памяти

Порядок строк в ps aux зависит от реализации: в Linux это обычно порядок номеров процессов, а в macOS ключ u по справке может сам включать сортировку по CPU, поэтому проверьте man ps и на всякий случай задавайте сортировку явно.

ЗадачаLinux (procps, GNU)macOS
Сортировка по CPUps aux --sort=-%cpups aux -r
Сортировка по памятиps aux --sort=-%memps aux -m

Минус перед именем столбца в GNU-версии означает порядок по убыванию. Ключа --sort в стандартном ps из macOS нет, зато там есть -r и -m, их назначение уточняйте в man ps своей версии. Если вы работаете на BusyBox, например на роутере или в минимальном контейнере, набор возможностей ещё скромнее, и ключа --sort может не быть.

Первые строки вывода после сортировки интересны, но обратите внимание на заголовок: head -n 10 берёт заголовок как первую строку, поэтому реальных процессов в выводе девять.

Если нужны другие столбцы, например время работы или номер родительского процесса, используйте формат -o, подробнее об этом на странице про ps -eo.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Фильтры по пользователю, PID и родителю

Не всегда нужен весь список. Ключи ps позволяют сразу сузить выбор без grep.

  • ps -U имя_пользователя показывает процессы пользователя (по реальному идентификатору). Название подставьте своё. Запись ps -u имя пригодна только для Linux: в macOS ключ -u означает формат вывода и имени не принимает.
  • ps -p 1234 выводит один процесс по PID, а несколько номеров перечисляются через запятую.
  • ps -ef даёт альтернативный формат в стиле System V, где есть PPID, родительский процесс. Он есть в обеих системах.
  • ps aux | wc -l считает строки, то есть процессы плюс заголовок. Подробнее о подсчёте на странице про head и wc -l.

Смешивание стилей ключей с тире и без в разных системах ведёт себя по-разному, поэтому надёжнее держаться одной формы: ps aux или ps -ef. Различия между ними в основном во внешнем виде вывода.

Помните про ограничения доступа. Обычный пользователь видит чужие процессы, но не видит их внутренностей, а в некоторых настроенных системах, например при ограничении через hidepid в Linux, список процессов чужих пользователей скрыт вовсе. Это нормальная защита, а не поломка команды.

Что делать с найденным процессом

Нашли процесс, который нагружает систему. Решение зависит от того, чей он. Если это ваша программа и она зависла, завершите её штатно: сначала предложите закрыться самой, затем сигнал TERM, и только потом принудительный KILL. Порядок и разница описаны на странице kill и top.

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

Если процесс просто занимает много процессора в фоне, но нужен вам, не обязательно его убивать: можно понизить приоритет через nice и renice, и он перестанет мешать интерактивным задачам.

А если вы не узнаёте процесс, не завершайте его сразу. Посмотрите полный путь: в выводе ps aux столбец COMMAND показывает путь и аргументы, и по ним обычно видно, к какой программе он относится. Незнакомый путь во временной папке стоит проверить внимательнее, а при сомнениях обратиться к администратору.

Сводка ключей и приёмов

Ниже короткий перечень приёмов, которые стоит держать под рукой, когда нужно разобраться со списком процессов.

  • ps aux показывает все процессы с ресурсами, ps -ef даёт PPID.
  • grep -v grep или шаблон с квадратными скобками убирают строку самого grep.
  • В Linux сортировка встроена через --sort, в macOS есть ключи -r и -m.
  • ps -U имя ограничивает вывод одним пользователем, ps -p номер выбирает конкретный процесс.
  • head -n ограничивает длину списка, учитывая заголовок.

Если вам нужно что-то сверх этого, например время работы или родитель, переходите к формату -o. А когда нужно только имя и номер, быстрее воспользоваться pgrep.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
psпроцессыlinuxmacos

Часто задаваемые вопросы

Читайте также