Введение / Зачем это нужно
Управление процессами в Linux — базовый навык для диагностики нагрузки и восстановления работы системы. Знание того, как находить ресурсоёмкие или зависшие задачи и как их безопасно завершать, помогает избежать перезагрузок сервера и потери данных. После выполнения этого гайда вы сможете быстро оценивать состояние системы и применять подходящие способы завершения процессов.
Требования / Подготовка
- Система на базе Linux (Ubuntu 22.04+, Debian 11+, CentOS Stream 9 или Fedora 38+).
- Доступ к терминалу под пользователем с правами
sudoдля установки утилит и управления сервисами. - Утилиты
htop(опционально) и стандартные инструменты:top,ps,kill,systemctl.
Пошаговая инструкция
Шаг 1: Просмотр списка процессов
Запустите top для интерактивного мониторинга или htop для более удобного интерфейса с цветовой индикацией и поддержкой мыши:
top
htop
Для разового вывода всех процессов с деталями используйте:
ps aux --sort=-%cpu | head -20
Эта команда отсортирует список по потреблению CPU и покажет 20 самых активных процессов.
Шаг 2: Поиск конкретного процесса
Найдите PID (идентификатор процесса) по имени или части команды. Например, для процесса nginx:
ps aux | grep nginx
Или используйте pidof, чтобы получить только PID:
pidof nginx
💡 Совет: Чтобы исключить сам
grepиз результатов, используйтеgrep [n]ginx.
Шаг 3: Корректное завершение процесса
Сначала попробуйте мягкое завершение. Отправьте сигнал SIGTERM (15), чтобы процесс мог завершить текущие операции и освободить ресурсы:
kill -15 PID
где PID — числовой идентификатор процесса, например:
kill -15 1245
Шаг 4: Принудительное завершение
Если процесс игнорирует SIGTERM или завис, используйте SIGKILL (9). Этот сигнал принудительно завершает процесс без ожидания:
kill -9 PID
Пример:
kill -9 1245
⚠️ Важно: Принудительное завершение может привести к потере несохранённых данных. Используйте только в случае необходимости.
Шаг 5: Остановка через systemd
Для системных сервисов предпочтительнее управлять ими через systemctl. Это позволяет корректно остановить службу с учётом зависимостей:
sudo systemctl stop nginx
Проверить статус сервиса можно командой:
sudo systemctl status nginx
Если сервис должен быть отключён и после перезагрузки, выполните:
sudo systemctl disable nginx
Проверка результата
Убедитесь, что процесс больше не запущен. Для этого используйте:
ps -p PID
Если процесс не найден, команда вернёт пустой вывод или сообщение об ошибке. Для сервисов проверьте статус через:
sudo systemctl is-active nginx
Команда вернёт inactive, если сервис успешно остановлен.
Возможные проблемы
- Процесс не реагирует на
kill -15и продолжает работать. В этом случае используйтеkill -9. Если и это не помогает, проверьте, не находится ли процесс в состоянии D (непрерываемого сна), что может указывать на проблему с ядром или драйверами. - Недостаточно прав для завершения процесса. Используйте
sudoперед командойkillили переключитесь на пользователя с необходимыми привилегиями. - Не удаётся найти PID по имени. Убедитесь, что процесс действительно запущен, и проверьте правильность написания имени или используйте более широкий фильтр через
ps aux | grep -i имя. - Сервис не останавливается через
systemctl. Проверьте логи черезjournalctl -u имяи убедитесь, что у юнита нет блокирующих зависимостей или таймаутов остановки. При необходимости настройте переопределение таймаута черезsystemctl edit имя.