Во время использования операционной системы Linux возникают ситуации, при которых процессы зависают и вы не можете их завершить. Например, вы хотите закрыть графическую программу или сервис, отправляете сигнал TERM, что в переводе означает завершить, а программа не реагирует на него.
Дело в том, что для того, чтобы программа могла завершится с помощью сигнала TERM, она должна быть в рабочем состоянии. Это сигнал просит программу завершится. Если программа зависла, она может попросту не получить ваш сигнал. Или программа может его обработать но не завершатся, этот сигнал носит рекомендательный характер. Вот возможные причины и варианты решения:
- Недостаточно прав — вы не можете убить процесс, запущенный от имени другого пользователя, используйте sudo;
- Программа зависла — необходимо ей послать сигнал KILL;
- Программа стала зомби — необходимо уничтожить её родительский процесс.
- Программа ждет ответа от драйвера — ждать или перезапустить компьютер.
В любом случае сначала пробуем от имени суперпользователя:
sudo kill -KILL идентификатор_процесса
Сначала можно попробовать завершить программу с помощью сигнала KILL, для этого передайте -KILL или -9 в виде опции утилите kill:
kill -KILL идентификатор_процесса
Если это не работает, можно попробовать посмотреть родительский процесс программы с помощью утилиты ps:
ps -xal | grep идентификатор_процесса
А затем его уничтожить. Подробнее об этом читайте в статье зомби процессы Linux. Последний возможный вариант — программа находится в состоянии TASK_UNITERRUPTIBLE. В это состояние программа, когда она ожидает ответа от драйвера. Например, драйвера оборудования или файловой системы. Обычно, когда драйвер отрабатывает, программа становится обычной, но при ошибках в драйверах программа может остаться в этом состоянии навсегда. Убить её нельзя, можно только перезагрузкой компьютера.