Во время использования операционной системы Linux возникают ситуации, при которых процессы зависают и вы не можете их завершить. Например, вы хотите закрыть графическую программу или сервис, отправляете сигнал TERM, что в переводе означает завершить, а программа не реагирует на него.
Дело в том, что для того, чтобы программа могла завершится с помощью сигнала TERM, она должна быть в рабочем состоянии. Это сигнал просит программу завершится. Если программа зависла, она может попросту не получить ваш сигнал. Или программа может его обработать но не завершатся, этот сигнал носит рекомендательный характер. Вот возможные причины и варианты решения:
- Недостаточно прав - вы не можете убить процесс, запущенный от имени другого пользователя, используйте sudo;
- Программа зависла - необходимо ей послать сигнал KILL;
- Программа стала зомби - необходимо уничтожить её родительский процесс.
- Программа ждет ответа от драйвера - ждать или перезапустить компьютер.
В любом случае сначала пробуем от имени суперпользователя:
sudo kill -KILL идентификатор_процесса
Сначала можно попробовать завершить программу с помощью сигнала KILL, для этого передайте -KILL или -9 в виде опции утилите kill:
kill -KILL идентификатор_процесса
Если это не работает, можно попробовать посмотреть родительский процесс программы с помощью утилиты ps:
ps -xal | grep идентификатор_процесса
А затем его уничтожить. Подробнее об этом читайте в статье зомби процессы Linux. Последний возможный вариант - программа находится в состоянии TASK_UNITERRUPTIBLE. В это состояние программа, когда она ожидает ответа от драйвера. Например, драйвера оборудования или файловой системы. Обычно, когда драйвер отрабатывает, программа становится обычной, но при ошибках в драйверах программа может остаться в этом состоянии навсегда. Убить её нельзя, можно только перезагрузкой компьютера.
A pro
killall -9 firefox
Zabily??????????
Sudo reboot
Решение в духе мастдая. По-старинке убиваю зависшие процессы вот-так: killall -9 nameprocess
Мне всегда было удобнее убивать htop'ом. Там можно сразу выбрать какой из сигналов завершения хочешь использовать. И так же строишь процессы в группы и убиваешь родителя
Вот пример, на Ubuntu 19.10 у меня периодически не запускался Krusader, процесс висит но программа не запускается и убить процесс не получается, только перезагрузкой. Я использовал программу для ftp соединения, оказалось что зависал процесс ssh, убиваю ssh и Krusader запускается и работает.
Я имел ввиду, что в статье нет информации что иногда процесс нельзя убить не потому что он находится в каком-то состоянии, а потому что завис другой, зависимый, процесс, который не позволяет убить процесс.