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

Каждая программа в Linux запускается как процесс. Эта шпаргалка содержит все команды для мониторинга, управления и контроля процессов в системе.

МОНИТОРИНГ ПРОЦЕССОВ

Команда ps (текущие процессы):

Команда Описание Полезные опции
ps aux Все процессы всех пользователей a (все), u (пользователь), x (без терминала)
ps -ef Все процессы в полном формате -e (все), -f (полный формат)
ps -u user Процессы конкретного пользователя -u username
ps -p PID Конкретный процесс по PID -p 1234
ps -C имя Процессы по имени команды -C nginx
ps -o pid,comm,%cpu,%mem Пользовательский формат вывода -o (вывод своих колонок)
ps --forest Дерево процессов (иерархия) --forest или -H
ps -L -p PID Потоки (threads) процесса -L (потоки)

Самые полезные форматы:

ps aux —sort=-%mem | head -10 # Топ-10 по памяти
ps aux —sort=-%cpu | head -10 # Топ-10 по CPU
ps -eo pid,ppid,cmd,%mem,%cpu —sort=-%mem | head -20 # Детально

Команды top и htop (интерактивный мониторинг):

Команда Описание Горячие клавиши в top
top Интерактивный мониторинг M (по памяти), P (по CPU), k (убить), q (выход)
htop Улучшенный top (требует установки) F2 (настройка), F9 (сигналы), F10 (выход)
top -u user Только процессы пользователя  
top -p PID1,PID2 Конкретные процессы  
top -d 2 Обновление каждые 2 секунды  
top -b -n 1 > файл.txt Однократный вывод в файл  

Установка htop:

# Ubuntu/Debian
sudo apt install htop

# RHEL/CentOS
sudo yum install htop
sudo dnf install htop

# Arch
sudo pacman -S htop

УПРАВЛЕНИЕ ПРОЦЕССАМИ

Запуск процессов:

Команда Описание Пример
команда & Запуск в фоне python3 script.py &
nohup команда & Запуск в фоне с игнорированием SIGHUP nohup ./server &
setsid команда Запуск в новой сессии setsid long_running.sh
screen Виртуальные терминалы screen -S session_name
tmux Современная замена screen tmux new -s session

Управление фоновыми задачами (jobs):

Команда Описание
jobs Показать фоновые задачи текущей сессии
fg %N Вернуть задачу на передний план
bg %N Отправить задачу в фон
Ctrl+Z Приостановить текущую задачу
disown Открепить задачу от терминала

Пример работы с jobs:

python3 server.py # Запуск
Ctrl+Z # Приостановить
jobs # [1]+ Stopped python3 server.py
bg %1 # Отправить в фон
disown %1 # Открепить от терминала

СИГНАЛЫ ПРОЦЕССАМ (КОМАНДА KILL)

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

Сигнал Номер Описание Когда использовать
SIGHUP 1 Hangup (перезагрузить конфиг) Демоны (nginx, apache)
SIGINT 2 Interrupt (Ctrl+C) Интерактивные программы
SIGQUIT 3 Quit (создать core dump) Отладка
SIGKILL 9 Kill (немедленное завершение) Не отвечает на другие сигналы
SIGTERM 15 Terminate (мягкое завершение) По умолчанию для kill
SIGSTOP 17,19,23 Stop (приостановка) Ctrl+Z
SIGCONT 18,25 Continue (продолжить) После SIGSTOP
SIGTSTP 20 Terminal Stop (Ctrl+Z) Интерактивная остановка

Команда kill и аналоги:

Команда Описание Пример
kill PID Отправить SIGTERM (15) kill 1234
kill -9 PID Отправить SIGKILL (9) kill -9 1234
kill -HUP PID Отправить SIGHUP (1) kill -HUP 5678
kill -STOP PID Приостановить процесс kill -STOP 1234
kill -CONT PID Продолжить процесс kill -CONT 1234
killall имя Убить все процессы с именем killall nginx
pkill шаблон Убить по шаблону имени pkill python
pkill -u user Убить все процессы пользователя pkill -u alex
kill %N Убить фоновую задачу kill %1

ДОПОЛНИТЕЛЬНЫЕ УТИЛИТЫ МОНИТОРИНГА

Команда pidof и pgrep:

Команда Описание
pidof имя Найти PID процесса по имени
pgrep имя Найти PID с фильтрацией
pgrep -l шаблон Список с именами
pgrep -f шаблон По полной командной строке

Утилиты для анализа ресурсов:

Команда Описание
pstree Дерево процессов
lsof Открытые файлы процессами
fuser Какие процессы используют файл/порт
vmstat Статистика виртуальной памяти
mpstat Статистика CPU
iostat Статистика ввода/вывода
sar Системная статистика

ПРИОРИТЕТЫ ПРОЦЕССОВ (NICE И RENICE)

Команда Описание Диапазон
nice -n значение команда Запуск с указанным nice -20 (высший) до 19 (низший)
renice значение -p PID Изменить nice запущенного процесса  
renice значение -u user Изменить nice всех процессов пользователя  
chrt -p PID Показать политику планировщика и приоритет  

Примеры:

nice -n 10 ./script.sh # Запустить с низким приоритетом
nice -n -10 ./critical.sh # Запустить с высоким приоритетом (требует root)
renice 5 -p 1234 # Изменить приоритет процесса 1234
renice -5 -u www-data # Повысить приоритет всех процессов пользователя www-data

СИСТЕМНЫЕ ЛИМИТЫ И РЕСУРСЫ

Команда ulimit:

Команда Описание
ulimit -a Показать все лимиты текущей оболочки
ulimit -n Максимальное число открытых файлов
ulimit -u Максимальное число процессов
ulimit -c Максимальный размер core файлов
ulimit -n 4096 Установить лимит открытых файлов

Файлы лимитов системы:

  • /etc/security/limits.conf — глобальные лимиты пользователей

  • /proc/sys/kernel/pid_max — максимальный PID (максимум процессов)

  • /proc/PID/limits — лимиты конкретного процесса

ПРОДВИНУТЫЙ МОНИТОРИНГ

Информация о конкретном процессе:

Путь в /proc Информация
/proc/PID/status Общая информация о процессе
/proc/PID/stat Статистика в машинном формате
/proc/PID/statm Использование памяти
/proc/PID/io Статистика ввода/вывода
/proc/PID/fd/ Открытые файловые дескрипторы
/proc/PID/environ Переменные окружения
/proc/PID/cmdline Командная строка запуска
/proc/PID/cwd Ссылка на рабочую директорию
/proc/PID/exe Ссылка на исполняемый файл

Примеры:

cat /proc/1234/status # Информация о процессе
ls -la /proc/1234/fd/ # Открытые файлы
cat /proc/1234/cmdline | tr ‘\0’ ‘ ‘ # Командная строка

БЫСТРАЯ ДИАГНОСТИКА ПРОБЛЕМ С ПРОЦЕССАМИ

# 1. Найти процессы, потребляющие много CPU
ps aux —sort=-%cpu | head -10
top -b -n 1 | head -20

# 2. Найти процессы, потребляющие много памяти
ps aux —sort=-%mem | head -10
top -b -n 1 -o %MEM | head -20

# 3. Найти зависшие процессы
ps aux | grep -E «(D|Z)» # D=uninterruptible sleep, Z=zombie

# 4. Проверить процессы пользователя
ps -u username -o pid,%cpu,%mem,cmd —sort=-%cpu

# 5. Найти процесс по используемому порту
lsof -i :80
ss -tulpn | grep :80

# 6. Убить все процессы программы
pkill -9 nginx
killall -9 python

# 7. Мониторинг в реальном времени
htop # Лучше всего
glances # Альтернатива (требует установки)

# 8. Анализ дерева процессов
pstree -p -u -a # Дерево с PID, пользователями, аргументами

# 9. Проверить лимиты процесса
cat /proc/$(pidof nginx)/limits

# 10. Найти утечки памяти
valgrind —leak-check=full ./program # Требует установки valgrind

ПОЛЕЗНЫЕ ОДНОСТРОЧНИКИ ДЛЯ АДМИНИСТРИРОВАНИЯ

# Перезапустить все процессы пользователя (кроме текущей оболочки)
pkill -u $USER -9; kill -9 -1

# Найти и убить процессы старше 1 дня
find /proc -maxdepth 1 -type d -name ‘[0-9]*’ -mtime +1 -exec basename {} \; | xargs kill -9

# Мониторинг процессов в реальном времени с записью в лог
watch -n 2 ‘ps aux —sort=-%mem | head -20 >> /var/log/process_monitor.log’

# Автоматическое завершение процессов при превышении лимита памяти
while true; do
ps aux | awk ‘$4 > 50 {print $2}’ | xargs kill -9 2>/dev/null
sleep 60
done

# Показать 10 процессов с наибольшим количеством потоков
ps -eo pid,nlwp,cmd —sort=-nlwp | head -11

 

Дата последнего обновления: 12/05/2025.