linux-labs

Вики / Процессы

Процессы (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.

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

Порт — ss -tlnp; файл/каталог — 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                # приоритет

См. также