Я работал нормально, и вдруг одна программа рухнула: она перестала отвечать, а ее окно стало серым. После этого появилось сообщение с вопросом, что делать: закрыть программу или подождать, пока она ответит.
Я выбрал «Закрыть программу», но это не сработало так, как предполагалось: вся Ubuntu зависла, и я ничего не мог сделать.
Тогда я понимаю, что, набрав текст, Ctrl + Alt + t
я могу открыть терминал, и это сработало: терминал открылся.Но я не знала, что делать дальше..
Итак, мой вопрос:Что делать в терминале, если программа зависла?В моем случае это был nautilus (я подключался к удаленному серверу, используя его как FTP-программу), и в итоге мне пришлось перезагрузить машину с помощью sudo reboot
.
Это отстой. Это было бы намного лучше.закрыть неотвечающую программу, но как это сделать? И что делать, если я не знаю имени неотвечающей программы?
К вашему сведению, Я прочитал эту тему "Элементы пользовательского интерфейса становятся полностью невосприимчивыми" и я не думаю, что это тот же случай, потому что у меня обычно не возникает этой проблемы, это происходит довольно редко, и память работает нормально, и машина довольно новая (Intel Core i7, 8 ГБ ОЗУ).
решение1
Вы можете сделать xkill
. Эта изящная маленькая утилита автоматически уничтожает следующее окно, на которое вы нажмете.
Другой вариант, который вы можете использовать, это что-то под названием top
или htop
. Найдите странный процесс, особенно что-то, помеченное как "зомби" или занимающее много системных ресурсов. Затем вы можете убить его с помощью клавиши K. Используйте код убийства 9, так как это вызывает мгновенное и принудительное завершение процесса.
Допустим, плохая программа — nautilus
. Используйте один из этих методов:
- Используйте
xkill
в терминале и щелкните по окну Nautilus. X завершит сеанс, что приведет к сбою Nautilus. Нажмите клавишу спама ESCна несколько секунд, чтобы убедиться, что Xkill все еще не запущен. killall -9 nautilus
- Бегите
top
, ищитеnautilus
и убивайте его сверху.
sudo
Обратите внимание, что для завершения некоторых процессов вам могут потребоваться привилегии.
решение2
Одним из главных преимуществ терминальной системы является то, что ответ на нее однозначен: ДА.
Обычно я переключаюсь на терминал 1 (ваш рабочий стол всегда находится в терминале 7) с помощью control- alt- 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, — моя команда)
Первая цифра после моего имени входа — это идентификатор процесса. 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).