Перейти к содержимому

5. Управление процессами

Процесс — это запущенная программа. У каждого процесса есть уникальный идентификатор (PID — Process ID), родительский процесс (PPID), владелец, использование CPU и памяти.

Понимание процессов — ключ к диагностике проблем с производительностью и зависшими программами.

Окно терминала
ps # процессы текущей сессии
ps aux # все процессы всех пользователей
ps aux | grep nginx # найти конкретный процесс
ps -ef # расширенный формат с PPID
ps -u username # процессы конкретного пользователя
ps --sort=-%cpu # сортировать по CPU
ps --sort=-%mem # сортировать по памяти

Колонки в ps aux:

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 16952 1092 ? Ss 10:00 0:01 /sbin/init
  • VSZ — виртуальная память (KB)
  • RSS — реальная физическая память (KB)
  • STAT: R=running, S=sleeping, Z=zombie, T=stopped
Окно терминала
top # запустить top
top -u username # только процессы пользователя
top -p 1234 # только конкретный PID

Горячие клавиши в top:

  • q — выход
  • k — убить процесс (введи PID)
  • M — сортировать по памяти
  • P — сортировать по CPU
  • 1 — показать все ядра CPU
  • h — справка

htop — цветной, удобный, интерактивный монитор. Нужно установить:

Окно терминала
sudo apt install htop # Debian/Ubuntu
sudo yum install htop # CentOS/RHEL
Окно терминала
htop # запустить
htop -u username # фильтр по пользователю

Фичи htop:

  • Цветные индикаторы CPU и памяти
  • Мышь работает!
  • F5 — дерево процессов
  • F9 — послать сигнал
  • F6 — сортировка
  • / — поиск
Окно терминала
kill 1234 # завершить процесс по PID (SIGTERM)
kill -9 1234 # принудительно убить (SIGKILL)
kill -15 1234 # мягкое завершение (SIGTERM, по умолчанию)
kill -SIGSTOP 1234 # приостановить процесс
kill -SIGCONT 1234 # возобновить процесс
killall nginx # убить все процессы с именем nginx
pkill -f "python app.py" # убить по части имени

Основные сигналы:

СигналЧислоЗначение
SIGTERM15Вежливое завершение
SIGKILL9Принудительное завершение
SIGSTOP19Пауза
SIGCONT18Продолжить
SIGHUP1Перезагрузить конфигурацию
Окно терминала
long_process & # запустить в фоне
# [1] 12345 # [номер задачи] PID
./server.js & # запустить сервер в фоне
echo $! # PID последнего фонового процесса
Окно терминала
# Запусти процесс и нажми Ctrl+Z для паузы
some_command
# ^Z
# [1]+ Stopped some_command
jobs # список заданий
bg # продолжить последнее задание в фоне
bg %1 # продолжить задание №1 в фоне
fg # вернуть последнее задание на передний план
fg %2 # вернуть задание №2
Окно терминала
nohup ./server.js & # продолжит работу после выхода из терминала
nohup python app.py > app.log 2>&1 & # с перенаправлением вывода

nohup защищает процесс от сигнала HUP, который посылается при закрытии терминала.

Окно терминала
free -h # использование памяти
vmstat 1 # статистика каждую секунду
iostat 1 # статистика I/O
df -h # использование диска
du -sh /var/log/ # размер директории
lsof -p 1234 # открытые файлы процесса
lsof -i :8080 # какой процесс слушает порт 8080
Окно терминала
nice -n 10 ./heavy_task # запустить с пониженным приоритетом (10)
nice -n -20 ./urgent_task # с высоким приоритетом (нужны права root)
renice 15 -p 1234 # изменить приоритет работающего процесса

Приоритет (nice) от -20 (высший) до 19 (низший). По умолчанию 0.

Окно терминала
# 1. Посмотри все процессы
ps aux | head -20
# 2. Найди свои процессы
ps -u $USER
# 3. Запусти sleep в фоне
sleep 300 &
echo "PID: $!"
# 4. Посмотри задания
jobs
# 5. Переключись между фоном и передним планом
fg %1
# Ctrl+Z для паузы
bg %1
# 6. Убей процесс
kill %1
# 7. Запусти нагрузочный процесс и найди в top
yes > /dev/null &
TOP_PID=$!
top -bn1 | grep yes
kill $TOP_PID

Управление процессами — основа системного администрирования и отладки!