Как завершить зависший процесс в Linux с помощью kill и pkill
TL;DR
Коротко: используйте kill по PID и pkill по имени процесса. SIGTERM (15) просит программу завершиться корректно; SIGKILL (9) принудительно убивает процесс. Получите PID с помощью ps, pgrep или системного монитора; при необходимости используйте sudo.
Важно: сначала пробуйте SIGTERM, затем — SIGKILL, если процесс не реагирует.

Работать с зависшими программами проще, когда вы понимаете, какие сигналы есть и как безопасно их применять. Ниже — понятная инструкция, чек‑листы для разных ролей, таблицы и схема принятия решений.
Основы: что такое SIGTERM и SIGKILL
SIGTERM (номер 15) — дружелюбный сигнал для корректного завершения. Программы могут его перехватить и сохранить данные.
SIGKILL (номер 9) — принудительное уничтожение процесса; процесс не может обработать этот сигнал и завершается без очистки.
Короткое правило: сначала SIGTERM, если не помогает — SIGKILL.
Завершение зависшего процесса с помощью kill
Команда kill отправляет сигнал конкретному PID.
Пример: остановка процесса с PID 27065.
kill 27065Отправка SIGKILL (принудительное завершение):
kill -9 27065
kill -SIGKILL 27065Разница: SIGTERM даёт процессу шанс корректно завершиться; SIGKILL уничтожает мгновенно.

Список доступных сигналов можно посмотреть так:
kill -l
kill -LСовет: для системных демонов и процессов с доступом к данным сначала сигнализируйте SIGTERM, ожидайте пару секунд и лишь затем применяйте SIGKILL.
Завершение процессов по имени с помощью pkill
pkill убивает процессы по совпадению имени. Это удобно, когда PID неизвестен или процессов несколько.
Пример:
pkill nanoПринудительное завершение:
pkill -9 nano
pkill по умолчанию отправляет SIGTERM. Будьте аккуратны: pkill совпадает по шаблону имени и может затронуть несколько процессов.
Как узнать PID процесса
PID — ключевой идентификатор процесса. Несколько способов получить PID:
- ps + grep:
ps aux | grep nano- pgrep (выдаёт только PID):
pgrep nano- top или htop — интерактивные мониторы процессов.

Если процесс принадлежит другому пользователю, потребуется sudo:
sudo kill 27065Мини‑методология: быстрый план действий при зависании
- Оцените ситуацию: локальная программа или системный демон? Сохранены ли данные?
- Получите PID (pgrep/ps/top).
- Отправьте SIGTERM и подождите 3–10 секунд.
- Если ответ отсутствует — отправьте SIGKILL.
- Проверьте логи (journalctl, /var/log) и причины зависания.
Чек‑лист по ролям
Пользователь:
- Получить PID через pgrep или ps.
- Попробовать kill PID.
- При необходимости попросить админа о sudo.
Системный администратор:
- Оценить влияние на сервисы.
- Использовать systemctl stop для системных юнитов, если применимо.
- Если процесс не умирает — SIGKILL и последующий анализ логов.
Разработчик:
- Проверить обработчики сигналов в коде.
- Добавить журналирование на SIGTERM.
Альтернативные инструменты и подходы
- killall <имя> — аналог pkill, убивает все процессы по имени (в behaviour может отличаться в разных дистрибутивах).
- systemctl stop
— для systemd‑юнитов останавливает сервис корректно. - htop — интерактивный монитор с возможностью выделения процесса и отправки сигнала.
- docker kill / docker stop — для контейнеров используйте команду контейнера.
Когда pkill/kill не помогут: если процесс в состоянии D (uninterruptible sleep) ядро ждёт I/O — только перезагрузка или устранение причины I/O помогут.
Таблица сигналов: краткое сравнение
| Сигнал | Номер | Описание | Использовать когда |
|---|---|---|---|
| SIGTERM | 15 | Вежливый запрос завершиться | Обычное завершение, сохранить данные |
| SIGKILL | 9 | Принудительное убийство | Процесс не отвечает на SIGTERM |
| SIGHUP | 1 | Перезагрузить/перечитать конфиг | Перезагрузка демона без остановки хоста |
Схема принятия решения
flowchart TD
A[Процесс завис] --> B{Можно сохранить данные?}
B -->|Да| C[Отправить SIGTERM]
B -->|Нет/Не важно| D[Отправить SIGTERM]
C --> E[Подождать 3–10 с]
D --> E
E --> F{Процесс завершился?}
F -->|Да| G[Проверить логи и причины]
F -->|Нет| H[Отправить SIGKILL]
H --> I[Если не помог — исследовать D‑состояние или перезагрузить]
G --> J[Готово]
I --> JКритерии приёмки
- Процесс завершён и не отображается в ps/pgrep.
- Сервис, зависящий от процесса, работает или корректно перезапущен.
- Логи проанализированы и сделаны заметки о причине зависания.
Сценарии, когда подходы не работают
- Процесс в состоянии D (uninterruptible sleep) — сигнал не действует.
- Зависание связано с аппаратной проблемой (диск, сеть) — требуется устранение причины.
- Процесс зомби (state Z) уже завершился, но родитель не собрал статус — нужно убить родителя или дождаться его.
Советы по безопасности и правам доступа
- Не применяйте SIGKILL вслепую к системным процессам — это может привести к потере данных.
- На многопользовательской системе получите разрешения у администратора.
- Используйте sudo только при необходимости и фиксируйте действия.
Короткая памятка (чек‑шит)
- Узнать PID: pgrep <имя> или ps aux | grep <имя>
- Мягко убить: kill
- Принудительно: kill -9
или pkill -9 <имя> - Для systemd: systemctl stop
Однострочные определения (глоссарий)
- PID — идентификатор процесса в системе.
- SIGTERM — вежливый запрос завершиться.
- SIGKILL — принудительное мгновенное завершение.
- pkill/killall — команды для завершения по имени.
Заключение
Команды kill и pkill — надёжные инструменты для завершения зависших процессов в Linux. Начинайте с мягкого SIGTERM, анализируйте логи и переходите к SIGKILL только при необходимости. В многопользовательских средах согласуйте действия с администратором.
Дополнительные ресурсы: используйте htop для интерактивного контроля и systemctl для управления сервисами.