Как найти и убить зависший процесс в Linux: утилита top и команда kill
Что делать, если сервер Linux завис и тормозит
Когда сервер начинает отвечать с огромными задержками, сайты открываются медленно, а вентиляторы процессора гудят на полную мощность — скорее всего, один из процессов завис в бесконечном цикле (Loop), устроил утечку оперативной памяти (Memory Leak) или заблокировал диск. В Linux нет привычного окна «Диспетчера задач» с кнопкой «Снять задачу», но есть мощный консольный монитор top и команды управления сигналами ядра kill.
Таблица сигналов завершения процессов
| Сигнал | Номер | Действие | Когда применять |
|---|---|---|---|
SIGTERM | 15 | Мягкая просьба завершить работу, сохранив данные. | Стандартный метод: Безопасное выключение программы. |
SIGKILL | 9 | Принудительное жесткое уничтожение процесса ядром. | Экстренный метод: Зависшая намертво программа, не реагирующая на команды. |
Пошаговый поиск и уничтожение проблемного процесса
Шаг 1: Запуск интерактивного диспетчера задач (top)
Введите команду:
topВы увидите обновляемую таблицу процессов. Главные колонки:
- PID — уникальный цифровой идентификатор процесса (нужен для его закрытия).
- %CPU — процент нагрузки на процессор. Нажмите на клавиатуре заглавную букву P (Shift + P), чтобы отсортировать список по пожирателям CPU.
- %MEM — процент занятой оперативной памяти. Нажмите M (Shift + M), чтобы отсортировать по утечкам памяти.
- COMMAND — имя исполняемой программы (например,
php-fpm,python,mysqld).
Для выхода из top нажмите клавишу q.
Шаг 2: Быстрый поиск PID зависшей программы (pgrep / ps)
Если вы знаете имя зависшего скрипта (например, backup.py), найдите его PID напрямую:
pgrep -l backup.py
или через фильтр всех процессов:
ps aux | grep backup.pyШаг 3: Мягкое завершение процесса (kill PID)
Отправьте процессу сигнал на корректное закрытие (замените 1234 на ваш реальный PID):
kill 1234Шаг 4: Принудительное уничтожение процесса (kill -9)
Если программа зависла наглухо и игнорирует команду, уничтожьте ее принудительно сигналом SIGKILL (9):
sudo kill -9 1234
Или убить все процессы с одинаковым именем сразу:
sudo killall -9 php-fpmТиповые ошибки администраторов
- Стрельба из пушки (kill -9 на базу данных): Принудительное убийство процесса
mysqldилиpostgresчерез флаг-9может повредить таблицы базы данных и транзакционные логи InnoDB, приведя к долгому аварийному восстановлению (Crash Recovery). Всегда сначала пробуйте обычныйkill (SIGTERM). - Случайное убийство системных процессов: Никогда не пытайтесь завершить процесс с PID 1 (
systemd / init) — это вызовет мгновенную панику ядра (Kernel Panic) и перезагрузку сервера.
Инженеры ITSTM настроят мониторинг производительности в Grafana, оптимизируют пулы PHP-FPM/NodeJS и внедрят демоны автоматического перезапуска (Monit / Systemd Watchdog).
Частые вопросы (FAQ)
Чем утилита htop лучше стандартного top?
htop — это продвинутая версия top с цветным графическим интерфейсом, поддержкой мыши, удобным поиском по клавише F3 и возможностью убить процесс прямо из меню нажатием клавиши F9.
Что такое процессы-зомби (Zombie / Defunct) в top и как их убить?
Зомби — это завершившийся дочерний процесс, чей родитель не прочитал его статус выхода. Зомби не потребляет память или CPU. Убить зомби напрямую сигналом kill нельзя — нужно перезапустить его родительский процесс.
Что означает статус процесса 'D' (Uninterruptible Sleep)?
Статус 'D' означает, что процесс завис в ожидании ответа от дисковой подсистемы (I/O). Такой процесс невозможно убить даже через kill -9, пока не ответит зависший диск или сетевая шара NFS.
Как убить все процессы конкретного пользователя?
Используйте команду pkill с указанием имени пользователя: sudo pkill -u username -9