LinuxRuLinux без лишней теории
Процессы Linux

Команда ps aux: разбираем вывод и ищем нужный процесс

Редакция LinuxRu7 мин чтенияСоветы

Команда ps aux показывает все процессы системы: владельца, PID, загрузку процессора и памяти, состояние и полную команду запуска. Ниже расшифровка каждого столбца и кодов STAT, готовые команды для поиска, сортировки и завершения зависших процессов.

Содержание
  1. Что показывает
  2. Столбцы
  3. Коды STAT
  4. Поиск процесса
  5. Сортировка
  6. Дерево процессов
  7. Зомби и зависания
  8. AUX и щелчки звука
  9. Частые вопросы

Что делает ps aux и откуда такие буквы

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

Буквы пишутся без дефиса, это BSD-синтаксис утилиты ps из пакета procps-ng:

  • a - процессы всех пользователей, а не только ваши;
  • u - формат, ориентированный на пользователя: владелец, загрузка процессора и памяти, время старта;
  • x - добавить процессы без управляющего терминала: службы, демоны, потоки ядра.

Есть и вариант в стиле UNIX: ps -ef. Он показывает те же процессы, но другие столбцы, например PPID (номер родителя). Запись ps -aux с дефисом формально означает "процессы пользователя x". Современный ps обычно догадывается, что вы имели в виду, но в скриптах пишите без дефиса.

ps aux
# то же, но постранично
ps aux | less -S
# количество процессов в системе
ps aux --no-headers | wc -l

Как читать столбцы вывода

Типичная строка выглядит так:

USER   PID %CPU %MEM    VSZ   RSS TTY   STAT START  TIME COMMAND
root     1  0.0  0.1  23412 13800 ?     Ss   09:12  0:02 /usr/lib/systemd/systemd
anna  2741  3.4  4.2 3911284 342100 ?   Sl   09:15  1:47 /usr/lib/firefox/firefox
СтолбецЧто означаетНа что смотреть
USERВладелец процессаЧужой пользователь в списке может означать службу или взлом
PIDНомер процессаЕго передают в kill, renice, strace
%CPUДоля процессорного времени за всю жизнь процессаЭто среднее, а не текущая нагрузка
%MEMДоля физической памяти (RSS от общего объёма ОЗУ)Главный показатель "кто съел память"
VSZВиртуальная память в КиБЧасто огромная и почти ни о чём не говорит
RSSРезидентная память в КиБ, реально занятая в ОЗУДелите на 1024, получите МиБ
TTYТерминал процессаЗнак ? означает службу без терминала
STATСостояние процессаРасшифровка ниже
STARTВремя или дата запускаДля старых процессов показывается дата
TIMEНакопленное процессорное времяБольшое значение у фонового процесса стоит проверить
COMMANDКоманда с аргументамиВ квадратных скобках идут потоки ядра

Самая частая ошибка новичков - читать %CPU как мгновенную загрузку. Процесс, который минуту назад грузил ядро на 100%, а потом уснул, в ps ещё долго будет показывать заметный процент, потому что значение усредняется с момента запуска. Для текущей картины берите top или gotop.

Состояния процессов в поле STAT

Первая буква в STAT - основное состояние, следующие символы его уточняют. Список взят из раздела PROCESS STATE CODES в справке ps(1).

  • R - выполняется или стоит в очереди на процессор.
  • S - прерываемый сон, ждёт события. Таких процессов большинство, и это нормально.
  • D - непрерываемый сон, обычно ожидание диска или сети. Сигналы на него не действуют, пока не закончится ввод-вывод.
  • I - простаивающий поток ядра.
  • T и t - остановлен сигналом или отладчиком.
  • Z - зомби: процесс завершился, а родитель не забрал код возврата.

Дополнительные символы: < высокий приоритет, N низкий (nice), L страницы закреплены в памяти, s лидер сессии, l многопоточный процесс, + группа переднего плана в терминале. Так, Ssl у службы означает спящего многопоточного лидера сессии, вполне здоровое состояние.

Тревожный признак - много процессов в состоянии D. Обычно это значит, что подвис диск, сетевая папка NFS или SMB, или флешка отвалилась на запись. Смотрите dmesg и журнал: journalctl -k -b.

Как найти нужный процесс в списке

Полный список длинный, поэтому его почти всегда фильтруют. Классика с grep:

ps aux | grep firefox
# трюк с квадратными скобками: сам grep не попадёт в вывод
ps aux | grep '[f]irefox'
# сохранить заголовок таблицы
ps aux | head -n 1; ps aux | grep '[s]shd'

У ps есть и свои фильтры, они точнее grep:

# по имени программы
ps -C sshd -o pid,user,%cpu,%mem,cmd
# процессы конкретного пользователя
ps -u anna u
# один процесс по PID
ps -p 2741 -o pid,etime,cmd
# быстрый поиск PID с полной командой
pgrep -a firefox

Ключ etime показывает, сколько процесс уже работает, удобно для проверки, перезапускалась ли служба. Если процесс запущен как служба systemd, его статус, PID и последние строки лога быстрее увидеть через systemctl status, об этом статья про systemctl.

Сортировка и свои наборы столбцов

Чтобы увидеть самых прожорливых, отсортируйте вывод. Минус перед полем означает сортировку по убыванию:

# топ-5 по памяти
ps aux --sort=-%mem | head -n 6
# топ-5 по процессору
ps aux --sort=-%cpu | head -n 6
# свои столбцы: PID, родитель, пользователь, память в КиБ, время работы, команда
ps -eo pid,ppid,user,rss,etime,cmd --sort=-rss | head -n 15
# точное время запуска процесса
ps -o pid,lstart,cmd -p 2741

Поля для -o можно переименовать прямо в команде: ps -eo pid,rss=ПАМЯТЬ_КБ,comm. Для скриптов пригодится --no-headers, тогда первая строка не мешает awk. Пример: сколько памяти в мегабайтах съедают все процессы Firefox вместе:

ps -C firefox -o rss --no-headers | awk '{s+=$1} END {print s/1024 " МиБ"}'

Учтите, что RSS у многопроцессных браузеров частично учитывает общие библиотеки несколько раз, поэтому сумма получается завышенной. Для грубой оценки хватает.

Родители и потомки: дерево процессов

Когда непонятно, кто запустил подозрительный процесс, нужна иерархия. Буква f рисует дерево псевдографикой:

ps auxf
# формат с PPID и группами процессов
ps axjf
# компактно, с номерами процессов
pstree -p

В дереве сразу видно, что, скажем, десяток процессов python3 принадлежит одной сессии терминала или одной службе. Для служб удобнее systemd-cgls: он показывает процессы, сгруппированные по юнитам systemd.

Зомби, зависшие процессы и что с ними делать

Найти зомби и процессы в непрерываемом сне можно одной строкой:

ps -eo pid,ppid,stat,cmd | awk '$3 ~ /^[ZD]/'

Зомби уже не работает и не ест память, от него осталась запись в таблице процессов. Убить его нельзя, он и так мёртв. Решение в родителе: его PID в столбце PPID. Перезапустите родительскую программу или службу, и зомби исчезнет. Пара зомби на рабочем столе не проблема, сотни и тысячи говорят об ошибке в программе.

Обычный зависший процесс завершают по нарастающей:

# вежливая просьба завершиться, процесс успеет сохранить данные
kill 2741
# если через несколько секунд жив
kill -9 2741
# по имени, для всех процессов с таким именем
pkill firefox

Сигнал 9 (SIGKILL) не даёт программе ничего сохранить, поэтому сначала всегда пробуйте обычный kill. Если же упала служба, правильнее разбираться через журнал, как в статье об упавших службах systemd.

Перед тем как убивать процесс с непонятным именем, посмотрите его родителя и путь к исполняемому файлу: ls -l /proc/PID/exe. Так вы не завершите случайно системную службу, а заодно заметите программу, запущенную из /tmp, что часто бывает признаком вредоноса.

Ещё больше базовых команд для работы с процессами и файлами собрано в подборке основных команд Linux.

Если вы искали AUX: щелчки в колонках

Раньше на этой странице жила заметка о другом AUX, аудиовыходе. Проблема по-прежнему встречается: колонки или наушники щёлкают в начале и в конце звука. Причина в энергосбережении: звуковой кодек засыпает в паузах и просыпается с характерным щелчком.

Колонки, подключённые к линейному выходу AUX компьютера с Linux
Щелчки при паузах в звуке связаны с режимом энергосбережения кодека

Для встроенного звука Intel HDA (модуль snd_hda_intel) энергосбережение отключается так, до перезагрузки:

echo N | sudo tee /sys/module/snd_hda_intel/parameters/power_save_controller
echo 0 | sudo tee /sys/module/snd_hda_intel/parameters/power_save

Чтобы настройка сохранялась, создайте файл /etc/modprobe.d/audio-powersave.conf со строкой:

options snd_hda_intel power_save_controller=N power_save=0

В 2026 году почти везде звук идёт через PipeWire, и у него свой таймер: WirePlumber приостанавливает неиспользуемый выход через несколько секунд тишины. Если щелчки остались, отключите это в файле ~/.config/wireplumber/wireplumber.conf.d/51-no-suspend.conf:

monitor.alsa.rules = [
  {
    matches = [ { node.name = "~alsa_output.*" } ]
    actions = { update-props = { session.suspend-timeout-seconds = 0 } }
  }
]

Затем перезапустите звук: systemctl --user restart wireplumber pipewire. Синтаксис относится к WirePlumber 0.5 и новее. Если звука нет совсем, пройдите по шагам из статьи PipeWire без звука.

Частые вопросы

Чем ps aux отличается от ps -ef?

Оба варианта показывают все процессы. ps aux в BSD-стиле выводит загрузку процессора и памяти, ps -ef в стиле UNIX показывает PPID и время старта, но без %MEM.

Почему %CPU в ps не совпадает с top?

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

В каких единицах VSZ и RSS?

В кибибайтах. Чтобы получить мебибайты, разделите значение на 1024.

Как убить зомби-процесс?

Никак, он уже завершён. Нужно перезапустить или завершить родительский процесс, его PID виден в столбце PPID вывода ps -eo pid,ppid,stat,cmd.

Как убрать из вывода grep сам grep?

Возьмите первую букву имени в квадратные скобки: ps aux | grep '[n]ginx', или используйте pgrep -a nginx.

Документация и источники

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

Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.