Как завершить зависшие процессы в Linux

Работа с зависшими программами особенно раздражает на старом оборудовании. В таких случаях система может подтормаживать или полностью «виснуть». К счастью, в Linux есть простые инструменты для завершения зависших и «зомби» процессов прямо из терминала.
В этой статье описаны основные способы — kill и pkill — а также сопутствующие приёмы: как найти PID процесса, когда эти команды не помогают и какие есть альтернативы.
Когда использовать kill
Команда kill отправляет сигнал процессу по его PID. По умолчанию она посылает сигнал SIGTERM (номер 15), который просит программу корректно завершиться.
Пример — завершение процесса с PID 27065:
kill 27065Если программа не реагирует на SIGTERM, можно использовать SIGKILL (номер 9). SIGKILL нельзя перехватить: процесс завершается немедленно.
kill -9 27065
# или
kill -SIGKILL 27065Разница в том, что SIGTERM даёт приложению шанс освободить ресурсы и сохранить данные. SIGKILL подходит, когда программа «зависла» полностью и не отвечает.
Важно: SIGKILL не даёт приложению возможности выполнить очистку. Используйте его только если SIGTERM не сработал.
Чтобы увидеть список всех доступных сигналов:
kill -l
# или
kill -LМини-методология: сначала пробуйте SIGTERM, подождите секунду или две, затем SIGKILL, если процесс остаётся в состоянии «D» или «Z» дольше ожидаемого.
Когда удобен pkill
pkill завершает процессы по имени, а не по PID. Это удобно, когда запущено несколько экземпляров или вы не хотите вручную искать PID.
Пример — завершить все процессы nano:
pkill nanoПо умолчанию pkill также посылает SIGTERM. Для немедленного завершения используйте SIGKILL:
pkill -9 nanopkill умеет фильтровать по владельцу, сессии, полному пути и другим атрибутам. Это делает её более гибкой для массового управления процессами.
Как получить PID процесса
PID — это уникальный идентификатор процесса. Его знание полезно для kill и диагностики.
Используйте ps с grep:
ps aux | grep nanoИли pgrep, который сразу возвращает PID:
pgrep nanoЕсли нужно больше информации о процессе, применяйте ps с форматированием или top/htop для интерактивного просмотра.
Практические советы и чек-лист по ролям
Чек-лист для разработчика/пользователя:
- Попробуйте закрыть приложение нормальными средствами (GUI или команда внутри приложения).
- Если не помогает — выполните ps/pgrep, посмотрите логи (journalctl или файл приложения).
- Попробуйте kill PID (SIGTERM).
- Если процесс остаётся — kill -9 или pkill -9 по имени.
- Убедитесь, что после завершения не осталось «залипших» блокировок файлов или баз данных.
Чек-лист для администратора:
- Проверьте владельца процесса: требуется ли sudo для завершения?
- Используйте sudo аккуратно: sudo kill -9 PID только при необходимости.
- Мониторьте систему на предмет повторяющихся зависаний (cron, systemd timers).
- Автоматизируйте очистку при подтверждённых сценариях (systemd unit с Restart=on-failure для сервисов).
Когда kill и pkill не помогают
Counterexamples/когда это не сработает:
- Процесс находится в состоянии D (uninterruptible sleep) — обычно из-за ожидания I/O на уровне ядра. Такие процессы нельзя убить, пока не завершится системный вызов.
- «Зомби» процессы (статус Z) — они уже завершены, но родитель ещё не прочитал их статус; их прекращают, убив родителя или настроив wait в родительском процессе.
- Проблемы на уровне драйвера или ядра требуют перезагрузки или обновления драйвера.
Если проблема — блокировка устройства или файловой системы, простое kill не поможет. Возможно, придётся размонтировать устройство, отправить сигналы модулю ядра или перезагрузить систему.
Альтернативные подходы
- systemctl restart
— для управления сервисами systemd. - killall <имя> — похож на pkill, но с разными опциями в разных дистрибутивах.
- Использование strace для отладки зависшего процесса: strace -p PID показывает, на каком системном вызове он «завис».
- htop — интерактивный просмотр и завершение процессов с удобной фильтрацией.
Матрица рисков и меры смягчения
- Риск: потеря данных при SIGKILL. Мягчение: сначала SIGTERM, резервное копирование критичных данных.
- Риск: убить системный процесс. Мягчение: проверка владельца и назначения процесса перед kill.
- Риск: повторные зависания. Мягчение: мониторинг и автоматический рестарт сервисов, анализ логов.
Ментальные модели и быстрые эвристики
- Правило трёх шагов: нормальное завершение → SIGTERM → SIGKILL.
- По имени (pkill) — быстро, по PID (kill) — точно.
- Если процесс в D — ищите проблему с I/O или драйвером, а не шлите SIGKILL.
Краткая методология для устранения зависания
- Определите процесс: ps / pgrep / htop.
- Проверьте логи: journalctl, /var/log/*.
- Попробуйте корректное завершение (SIGTERM).
- Если не отвечает — SIGKILL.
- После завершения проверьте целостность данных и повторяемость проблемы.
Decision flowchart (Mermaid)
flowchart TD
A[Замечено зависание] --> B{Можно ли корректно закрыть?}
B -- Да --> C[Закрыть приложение]
B -- Нет --> D[Найти PID 'pgrep/ps']
D --> E[Отправить SIGTERM]
E --> F{Процесс завершился?}
F -- Да --> G[Мониторинг]
F -- Нет --> H[Отправить SIGKILL]
H --> I{Завершился?}
I -- Да --> G
I -- Нет --> J[Проверить состояние D / логи / перезагрузить]Критерии приёмки
- Процесс завершён и больше не отображается в ps/pgrep.
- Сервис восстанавливает рабочее состояние (если применимо).
- Нет утечек файловых блокировок или ошибок в логах после завершения.
Глоссарий
- PID — идентификатор процесса в системе.
- SIGTERM — сигнал запроса на завершение (номер 15).
- SIGKILL — принудительное завершение без возможности перехвата (номер 9).
- D (state) — uninterruptible sleep (ожидание I/O).
- Z (state) — zombie (процесс завершён, но не собран).
Короткое резюме
Команды kill и pkill — ваши основные инструменты для управления зависшими процессами в Linux. Начинайте с SIGTERM, применяйте SIGKILL только при необходимости, проверяйте PID, логи и права. Если процесс находится в состоянии D или проблема повторяется, ищите корень проблемы на уровне I/O, драйверов или сервиса.
Важно: перед массовым применением kill/killall/pkill на продакшн-системе протестируйте действия в изолированной среде и убедитесь в наличии резервных копий.
Похожие материалы
Удалить геотеги на iPhone и iPad
Как безопасно научить детей пользоваться Facebook
Клонирование и расширение экрана в Windows 10
Работа с файлами в Go — filepath: примеры и советы
Сохранить письмо Gmail в PDF