На этот вопрос уже есть ответ здесь:
Я работал нормально, и вдруг одна программа рухнула: она перестала реагировать, и ее окно стало серым. После этого появилось сообщение с вопросом, что делать: закрыть программу или подождать, пока она ответит.
Я выбрал закрыть программу, но это не сработало так, как было задумано: вся ubuntu замерла, и я не мог ничего сделать.
Тогда я понял, что, набрав Ctrl + Alt + t
, я могу открыть терминал, и это сработало: терминал открылся. Но я не знал, что делать дальше.
Итак, мой вопрос: Что делать из терминала, если программа зависла? В моем случае это был nautilus (я подключался к удаленному серверу, используя его как FTP-программу), и в итоге я перезагрузил машину с помощью sudo reboot
.
Это отстой. Было бы гораздо лучше закрыть не реагирующую программу, но как это сделать? И что если я не знаю имя неотвечающей программы?
К вашему сведению, я читал эту тему "UI элементы становятся полностью неотвечающими" и я не думаю, что здесь тот же случай, потому что обычно у меня нет такой проблемы, это что-то вроде редкости, и память работает нормально, и машина довольно новая (intel Core i7, 8 Gb ram).
Можно сделать xkill
. Эта изящная небольшая утилита автоматически терзает следующее окно, которое Вы нажимаете.
Другая опция, которую можно использовать, является чем-то позвонившим top
или htop
. Ищите странный процесс, особенно что-то отмеченное как "зомби" или поднимающий много системных ресурсов. Можно тогда уничтожить его с помощью K ключ. Используйте уничтожают код 9, поскольку это вызывает момент, и вызванный уничтожают процесса.
Говорят, что плохая программа nautilus
. Используйте один из этих методов:
xkill
в терминале и нажимают на окно Nautilus. X завершит его сессию, заставляя Наутилус отказать. Массово разошлите ESC ключ в течение нескольких секунд, чтобы удостовериться, что Xkill stll не работает. killall -9 nautilus
top
, ищите nautilus
и уничтожьте его от вершины. Примечание, которое Вы, возможно, должны были бы использовать sudo
полномочия уничтожить некоторые процессы.
Одно из больших преимуществ на терминальном основанной системы, которую мы имеем, - то, что ответ является звучанием ДА.
то, Что я обычно делаю, переключиться на терминал 1 (Ваш рабочий стол всегда находится в терминале 7) с управление - высокий звук - f1 .
, Если Вы знаете то, что программа, это будет довольно легким: найдите идентификатор процесса той задачи и уничтожьте его. Задача исчезнет на терминале 7 и если это зафиксировало катастрофический отказ, Ваша система ответит снова.
Пример с помощью Firefox: при запуске Firefox, это получает идентификатор процесса, и можно просмотреть их с ps -ef | grep firefox
. Firefox замены с тем, что Вы хотите искать.
ps -ef |grep firefox
rinzwind 5046 1484 48 19:52 ? 00:00:01 /usr/lib/firefox/firefox
rinzwind 5113 4992 0 19:52 pts/4 00:00:00 grep --color=auto firefox
(процесс, относящийся к grep, является моей командой)
1-е число behing мое имя для входа в систему является идентификатором процесса. kill -9 5046
уничтожит Firefox:
~$ kill -9 5046
~$ ps -ef |grep firefox
rinzwind 5148 4992 0 19:54 pts/4 00:00:00 grep --color=auto firefox
и Firefox пошелся мой рабочий стол.
проблема обычно состоит в том, чтобы определять корректный идентификатор процесса: когда у Вас будет 5 сессий Firefox, открытых... получение корректного будет определенной проблемой. Тогда Вы, возможно, должны были бы добавить еще в некоторой логике для сужения его.
<час>Предупреждение: используйте здравый смысл. Уничтожения более низких идентификаторов процесса (под 500) нужно избежать.