Вики / Процессы
Процессы (ps, top, kill, nice)
Просмотр, сигналы и приоритеты процессов; поиск пожирателей CPU/памяти.
Процесс — запущенная программа со своим PID. У него есть владелец, приоритет,
состояние и потребление CPU/памяти. Управление — просмотр (ps/top), сигналы
(kill), приоритет (nice).
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 # удобнее (если установлен)
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 | приостановить / продолжить |
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 (лидер сессии).
Процесс грузит CPU
top (или ps aux --sort=-%cpu | head) → найди PID → дождаться / renice / kill.
Сначала TERM, только потом KILL.
Утечка памяти / OOM
ps aux --sort=-%mem | head; в журнале — journalctl -k | grep -i oom (ядро убило
по нехватке памяти, см. memory-swap).
Процесс-зомби (Z/defunct)
Сам безвреден — ждёт, пока родитель его «приберёт» (wait). Много зомби → баг родителя; перезапусти родительский процесс.
kill не убивает (даже -9)
Процесс в состоянии D (uninterruptible sleep, ждёт I/O) — kill не поможет, жди
завершения I/O или разбирайся с диском/NFS. Кто держит файлы — lsof.
Какой процесс открыл порт/файл
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 PID ; kill -9 PID ; kill -HUP PID # мягко / жёстко / reload
renice -n 5 -p PID # приоритет
См. также
- ss (сокеты и порты) — Сеть
- Место на диске (df, du, inode) — Хранилище и ФС