С чего начать Первые шаги трек · 15 ступеней
Linux Labs

Процессы

5 мин Linux

Просмотр, сигналы и приоритеты процессов; поиск пожирателей CPU/памяти.

Шпаргалка

9 команд Версия для печати
  • ps aux --sort=-%cpu | head топ CPU
  • ps aux --sort=-%mem | head топ памяти
  • ps -eo pid,stat,%cpu,%mem,etime,comm --sort=-%cpu | head
  • pgrep -a name найти по имени
  • pkill -f pattern убить по шаблону командной строки
  • kill 1234 мягко (SIGTERM)
  • kill -9 1234 жёстко (SIGKILL)
  • kill -HUP 1234 reload конфига демоном
  • renice -n 5 -p 1234 приоритет работающего процесса

Обзор

Процесс — запущенная программа со своим PID. У него есть владелец, приоритет, состояние и потребление CPU/памяти. Управление — просмотр (ps/top), сигналы (kill), приоритет (nice).

Рецепты

3

Просмотр

bash
ps aux                            # все процессы (BSD-стиль: %CPU %MEM STAT)
ps aux --sort=-%cpu | head        # топ по CPU
ps aux --sort=-%mem | head        # топ по памяти
ps -ef                            # все (UNIX-стиль, с PPID)
ps -eo pid,ppid,user,stat,%cpu,%mem,etime,comm --sort=-%cpu | head  # свои колонки
ps -p 1234 -o pid,etime,rss,cmd   # конкретный процесс
pgrep -a nginx                    # PID процессов по имени (+командная строка)
pstree -p                         # дерево процессов с PID
top                               # интерактивно (P=по CPU, M=по памяти, k=kill, 1=ядра)
htop                              # удобнее (если установлен)

Сигналы

bash
kill 1234                         # SIGTERM (15) — вежливо попросить завершиться
kill -9 1234                      # SIGKILL (9) — убить жёстко (последнее средство)
kill -HUP 1234                    # SIGHUP (1) — часто «перечитать конфиг»
kill -l                           # список всех сигналов
pkill -f 'python app.py'          # по шаблону полной командной строки
pkill -u alice                    # все процессы пользователя
killall nginx                     # по имени (точное)
Сигнал № Смысл
TERM 15 мягкое завершение (по умолчанию), процесс может прибраться
KILL 9 убить немедленно, нельзя перехватить (данные могут потеряться)
HUP 1 «отбой терминала»; у демонов часто = reload конфига
INT 2 как Ctrl+C
STOP/CONT 19/18 приостановить / продолжить

Приоритет и состояния

bash
nice -n 10 cmd                    # запустить с пониженным приоритетом (19=самый низкий)
renice -n 5 -p 1234               # изменить приоритет работающего (root для повышения)
ionice -c3 -p 1234                # класс приоритета по диску (idle)
chrt -f -p 50 1234                # realtime-политика (осторожно)

Колонка STAT в ps: R работает/готов, S спит (ждёт событие), D непрерываемый сон (ждёт I/O — kill не берёт!), Z зомби, T остановлен, I idle-поток ядра; суффиксы + (foreground), < (high nice), s (лидер сессии).

Неполадки

5

Процесс грузит CPU

top (или ps aux --sort=-%cpu | head) → найди PID → дождаться / renice / kill. Сначала TERM, только потом KILL.

Утечка памяти / OOM

ps aux --sort=-%mem | head; в журнале — journalctl -k | grep -i oom (ядро убило по нехватке памяти, см. oom-killer).

Процесс-зомби (Z/defunct)

Сам безвреден — ждёт, пока родитель его «приберёт» (wait). Много зомби → баг родителя; перезапусти родительский процесс.

kill не убивает (даже -9)

Процесс в состоянии D (uninterruptible sleep, ждёт I/O) — kill не поможет, жди завершения I/O или разбирайся с диском/NFS. Кто держит файлы — lsof.

Какой процесс открыл порт/файл

Порт — ss -tlnp; файл/каталог — lsof.

Опасно

Опасно. kill -9 (SIGKILL) не даёт процессу шанс закрыть файлы, отдать соединения или дописать данные на диск — используй его только после обычного TERM, когда процесс не завершился сам. pkill -f и killall находят процессы по шаблону командной строки или по имени: слишком широкий шаблон убивает не только целевой процесс, а всё, что под него подходит, включая чужие сессии на многопользовательской машине. Проверяй список через pgrep -a перед тем, как передавать тот же шаблон в pkill.

Термины

7
демон (daemon)
Фоновый процесс-служба без терминала, обычно запускается systemd и работает постоянно. Ещё встречается в: systemd, Docker, Таймеры systemd, at и ещё 15
PID
Числовой идентификатор процесса в пространстве PID. После завершения может использоваться повторно. Ещё встречается в: /proc: процессы и ядро в виде файлов, ulimit и лимиты процесса: открытые файлы, процессы, core, kill, wait и ещё 35
PPID
PID родительского процесса, наблюдаемый в текущем пространстве PID. Ещё встречается в: ps, /proc: процессы и ядро в виде файлов, kill
сигнал signal
Уведомление процесса о событии или запросе; действие зависит от сигнала и программы. Ещё встречается в: kill, Коды завершения: $?, && и ||, Load average: сколько задач ждёт процессор и диск, OOM killer: кто и почему завершил процесс и ещё 16
зомби-процесс zombie process
Завершившийся процесс, статус которого ещё не собран родителем; полезный код он уже не выполняет. Ещё встречается в: kill
процесс process
Выполняющийся экземпляр программы со своим PID, адресным пространством, открытыми файлами и учётными данными. Новые процессы порождаются существующими через fork() или clone(). Ещё встречается в: Docker, /proc: процессы и ядро в виде файлов, OOM killer: кто и почему завершил процесс, ps и ещё 65
приоритет nice nice value
Число от -20 до 19, по которому планировщик делит процессор: чем оно больше, тем меньше доля процесса. Запуск — nice -n 10 команда, работающий процесс — renice; понизить приоритет может владелец, повысить — только root. Ещё встречается в: Load average: сколько задач ждёт процессор и диск, cgroups и namespaces, stress-ng

См. также

  • ps — список процессов, колонки и состояния.
  • top — процессы и нагрузка в реальном времени.
  • kill — послать сигнал процессу.
  • ss — Кто слушает порты и какие соединения открыты — современная замена netstat.
  • disk-usage — Куда делось место и inode — df, du, поиск крупных файлов, ловушки.
Загрузка…