Гид по технологиям

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

5 min read Linux Обновлено 13 Dec 2025
Завершение зависших процессов в Linux
Завершение зависших процессов в Linux

Как завершить незавершённый процесс: kill и pkill

Работа с зависшими программами особенно раздражает на старом оборудовании. В таких случаях система может подтормаживать или полностью «виснуть». К счастью, в 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» дольше ожидаемого.

Остановка зависшего процесса с помощью kill

Когда удобен pkill

pkill завершает процессы по имени, а не по PID. Это удобно, когда запущено несколько экземпляров или вы не хотите вручную искать PID.

Пример — завершить все процессы nano:

pkill nano

По умолчанию pkill также посылает SIGTERM. Для немедленного завершения используйте SIGKILL:

pkill -9 nano

pkill умеет фильтровать по владельцу, сессии, полному пути и другим атрибутам. Это делает её более гибкой для массового управления процессами.

Завершение незавершённого процесса через pkill

Как получить PID процесса

PID — это уникальный идентификатор процесса. Его знание полезно для kill и диагностики.

Используйте ps с grep:

ps aux | grep nano

Или pgrep, который сразу возвращает PID:

pgrep nano

Если нужно больше информации о процессе, применяйте ps с форматированием или top/htop для интерактивного просмотра.

Поиск PID процесса в Linux

Практические советы и чек-лист по ролям

Чек-лист для разработчика/пользователя:

  • Попробуйте закрыть приложение нормальными средствами (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.

Краткая методология для устранения зависания

  1. Определите процесс: ps / pgrep / htop.
  2. Проверьте логи: journalctl, /var/log/*.
  3. Попробуйте корректное завершение (SIGTERM).
  4. Если не отвечает — SIGKILL.
  5. После завершения проверьте целостность данных и повторяемость проблемы.

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 на продакшн-системе протестируйте действия в изолированной среде и убедитесь в наличии резервных копий.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Удалить геотеги на iPhone и iPad
Приватность

Удалить геотеги на iPhone и iPad

Как безопасно научить детей пользоваться Facebook
Онлайн безопасность

Как безопасно научить детей пользоваться Facebook

Клонирование и расширение экрана в Windows 10
Windows

Клонирование и расширение экрана в Windows 10

Работа с файлами в Go — filepath: примеры и советы
Programming

Работа с файлами в Go — filepath: примеры и советы

Сохранить письмо Gmail в PDF
Инструкции

Сохранить письмо Gmail в PDF

Защита ячеек и листов в Google Sheets
Google Таблицы

Защита ячеек и листов в Google Sheets