Неубиваемый процесс в Linux: что делать, когда зависшая программа не реагирует

Неубиваемый процесс в Linux: что делать, когда зависшая программа не реагирует

Вы нажимаете «закрыть», а ничего не происходит. Вы отправляете команду на завершение, а программа продолжает висеть, словно насмехаясь над вами. Знакомая ситуация? В Linux даже у самых стабильных систем бывают дни, когда процессы превращаются в настоящих «зомби», игнорируя все ваши попытки их уничтожить.

Это не магия и не сбой системы. Чаще всего причина кроется в состоянии процесса, который просто не может или не хочет получать стандартные сигналы. Сигнал TERM, который вы отправляете, — это всего лишь вежливая просьба закрыться. А что, если программа «оглохла» и не слышит её?

Мы разберемся, почему это происходит. Возможно, у вас недостаточно прав для завершения чужого процесса. Или программа настолько зависла, что перешла в состояние «непрерываемого сна», ожидая ответ от драйвера. А может, она уже стала «зомби», и чтобы её похоронить, нужно найти и «убить» родителя.

В этом материале вы найдете четкий план действий. Мы не будем ограничиваться простым `kill -9`. Вы узнаете, как определить истинную причину проблемы с помощью утилиты `ps`, как найти родительский процесс и что делать в самом безнадежном случае, когда не помогает даже сигнал KILL.

Готовы наконец-то победить любого софтверного непотопляемого и вернуть контроль над своей системой? Тогда читайте статью — мы даем работающие инструкции.


Во время использования операционной системы Linux возникают ситуации, при которых процессы зависают и вы не можете их завершить. Например, вы хотите закрыть графическую программу или сервис, отправляете сигнал TERM, что в переводе означает завершить, а программа не реагирует на него.

Дело в том, что для того, чтобы программа могла завершится с помощью сигнала TERM, она должна быть в рабочем состоянии. Это сигнал просит программу завершится. Если программа зависла, она может попросту не получить ваш сигнал. Или программа может его обработать но не завершатся, этот сигнал носит рекомендательный характер. Вот возможные причины и варианты решения:

  • Недостаточно прав - вы не можете убить процесс, запущенный от имени другого пользователя, используйте sudo;
  • Программа зависла - необходимо ей послать сигнал KILL;
  • Программа стала зомби - необходимо уничтожить её родительский процесс.
  • Программа ждет ответа от драйвера - ждать или перезапустить компьютер.

В любом случае сначала пробуем от имени суперпользователя:

sudo kill -KILL идентификатор_процесса

Неубиваемый процесс в Linux: что делать, когда зависшая программа не реагирует

Сначала можно попробовать завершить программу с помощью сигнала KILL, для этого передайте -KILL или -9 в виде опции утилите kill:

kill -KILL идентификатор_процесса

Если это не работает, можно попробовать посмотреть родительский процесс программы с помощью утилиты ps:

ps -xal | grep идентификатор_процесса

А затем его уничтожить. Подробнее об этом читайте в статье зомби процессы Linux. Последний возможный вариант - программа находится в состоянии TASK_UNITERRUPTIBLE. В это состояние программа, когда она ожидает ответа от драйвера. Например, драйвера оборудования или файловой системы. Обычно, когда драйвер отрабатывает, программа становится обычной, но при ошибках в драйверах программа может остаться в этом состоянии навсегда. Убить её нельзя, можно только перезагрузкой компьютера.

Оставить комментарий


Кликните на изображение чтобы обновить код, если он неразборчив