Pull to refresh

Несколько способов не потерять данные при подвисании Gnome (Ubuntu и другие)

Reading time 3 min
Views 5K
После того, как уважаемые убунтарии изучили комбинации клавиш с Ctrl+Backspace и Ctrl+SysRq+*, мы можем перейти к более приземленным способам удаления зависших программ без уничтожения всего рабочего пространства и несохраненных документов.

Изза чего чаще всего виснет гном:
1. Наутилус зависает при потери связи с smb/sftp/usb, иногда при drag-n-drop
2. При копировании огромных текстов в текстовый редактор или из него
3. OpenGL скринсейверы иногда умудряются перегружать процессор и не пускают в систему.
4. Зависает всеми любимый монстр- Firefox

Система зависла, мышка двигается. (самый универсальный вариант)
Нажимаем Ctrl+Alt+F1, попадаем в текстовый терминал (для ноутбуков на внешнем экране — смотрите на экран ноутбука).
Спасибо odessky за напоминание, что этот же способ актуален и для внешнего подключения через SSH если ваша система настолько заблокировалась, что не отвечает на нажатия клавиш.
Входим в систему под своим логином, и попадаем в командную строку:
genius@notable:~$
Вводим команду top (enter)
В ответ получаем табличку вида:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12218 genius 20 0 377m 252m 29m S 90 8.3 16:27.35 firefox
16633 genius 20 0 2304 1052 764 R 4 0.0 0:00.02 top
10501 root 20 0 69176 61m 7204 S 2 2.0 7:51.39 Xorg


В данном примере мы видим, что завис процесс firefox (%CPU).
Нажав горячую клавишу k мы получаем возможность перепечатать PID нашего злосчастного процесса.
PID to kill:
Вводим 12218 (enter)

Теперь мы видим успокоившуюся систему. Переходим обратно в графический терминал, нажав Ctrl+Alt+F7

Вместо top мы можем использовать команду ps в таком виде:
Например мы точно уверены, что завис nautilus:
ps aux | grep nautilus

С помощью | grep nautilus мы отфильтровываем из «простыни» нужные нам ключевые слова. Как вы увидите ниже — сюда также попадет и данная нами команда.
genius@notable:~$ ps auxw | grep nautilus
genius 6943 0.0 1.0 81744 31412 ? Sl Nov11 0:05 nautilus --no-default-window --sm-client-id default2
genius 16962 0.0 0.0 3008 780 pts/0 R+ 19:04 0:00 grep nautilus


И убиваем неугодный нам процесс:
genius@notable:~$ kill 6943
Возможно придется добавить параметр -9 (SIG_KILL), если процесс не захочет завершаться.

Теперь, изучив основы, мы можем автоматизировать процесс беспощадного убийства:

Данный совет касается конфигурации Gnome+Metacity( т.е. большинства убунтариев). В КДЕ и XFSE по умолчанию настроена комбинация для запуска xkill — Ctrl+Alt+Esc.

Запускаем gconf-editor из консоли или из Главнного Меню: Applications -> System Tools -> Configuration Editor (простите за мой английский интерфейс)

В конфигураторе переходим в apps -> metacity -> keybinding_commands и выбираем первую свободную ячейку например command_1, дважды щелкаем и вводим значение xkill

Переходим в раздел apps -> metacity -> global_keybindings и находим там run_command_1 (номер соответствует номеру команды) и в значение записываем например: <Control><Shift>F1 (варианты названий спец комбинаций можете сделать по аналогии с соседними записями раздела)

Вуаля! Теперь на радостях вы можете нажать Ctrl+Shift+F1 (курсор превратится в зловещий крестик) и отдать первую жертву кровожадному xkill! Левый клик по окну приложения — убивает породившее его приложение (учтите, что клик по панели убьет gnome-panel а не приложение, которое в ней отображается), правый клик — отменяет убийство.

Как справедливо заметили комментаторы — xkill не гарантирует полного уничтожения приложения, оно отсоединяет зависшее приложение от сессии и дает ей сигнал к завершению. Приложение в свою очередь может этот сигнал проигнорировать. Для этого уже нужно воспользоватся одним из вариантов kill, killall с параметром -9 (SIG_KILL).
Tags:
Hubs:
+53
Comments 55
Comments Comments 55

Articles