Команда ps aux: разбираем вывод и ищем нужный процесс
Команда ps aux показывает все процессы системы: владельца, PID, загрузку процессора и памяти, состояние и полную команду запуска. Ниже расшифровка каждого столбца и кодов STAT, готовые команды для поиска, сортировки и завершения зависших процессов.
Содержание
Что делает 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, аудиовыходе. Проблема по-прежнему встречается: колонки или наушники щёлкают в начале и в конце звука. Причина в энергосбережении: звуковой кодек засыпает в паузах и просыпается с характерным щелчком.

Для встроенного звука 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.
Документация и источники
- ps(1) - report a snapshot of the current processes, procps-ng, man7.org, 2026
- snd-hda-intel: параметры модуля, The Linux Kernel documentation, 2026
- WirePlumber: ALSA configuration, PipeWire / freedesktop.org, 2026
Читайте также
Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.