Что делать, если система «зависла»

От Perlovka. 2007-07-08 19:17:05

«Подвесить» Линукс вполне реально, несмотря на стабильность системы. «Подвесить» взято в кавычки потому, что при кажущихся признаках капитального останова системы ядро продолжает работать.

Рассмотрим некоторые ситуации, в которые может попасть пользователь:

1. «Завис» X сервер

При зависании или неадекватном поведении X сервера, можно воспользоваться командой перезапуска сервера — Ctrl+Alt+Backspace. При этом, если сервер был запущен командой startx, вы вернетесь в приглашение консоли; если же он был запущен c помощью менеджера дисплея xdm (gdm,kdm), то вы окажетесь на экране вашего графического менеджера загрузки.

2. Приложение не воспринимает команды

Если система перестала отвечать на команды клавиатуры, и Ctrl+Alt+Backspace не помогает, приходится использовать более жесткие методы воздействия. Один из этих методов заключается в использовании низкоуровневых сигналов ядра. Они реализуются с помощью клавиши SysRq (System Request), также известной как PrintScreen.

Для использования этих сигналов вам может понадобиться пересобрать ядро с их поддержкой:

Kernel hacking --->
  • Magic SysRq key
  • Также можно включить эту опцию «на лету», но работать это будет до первой перезагрузки компьютера:

    echo "1" > /proc/sys/kernel/sysrq

    Итак, вы можете использовать следующие комбинации клавиш в аварийной ситуации:

    Alt+SysRq+R — изменение режима клавиатуры с Raw в XLAT. Если приложение зависло, и заблокировало клавиатуру, не оставляя вам возможности перейти в консоль простым нажатием Ctrl+Alt+F1, воспользуйтесь этой комбинацией. Теперь вы сможете перейти в консоль и прервать выполнение приложения.

    Alt+SysRq+K — эта комбинация носит название Secure Access Key (SAK). Она убивает все запущенные в текущей виртуальной консоли процессы. Исторически SAK предназначался для других целей. Применять его советовали пользователям перед тем как залогиниться в систему. Дело в том, что довольно легко написать программу или скрипт, эмулирующие логин. Неискушенный пользователь вводит свой логин и пароль, а «троянский конь» сохраняет их в надежном месте, чтобы злоумышленник воспользовался плодами вашей доверчивости. Если же юзер перед тем как зайти в систему нажмет SAK, то прибьет трояна и получит нормальное, «оригинальное» приглашение системы.

    Alt+SysRq+E — посылает сигнал SIGTERM всем процессам, кроме init. Сигнал SIGTERM означает, что система завершает некий процесс и прибирает за ним мусор — закрывает открытые процессом файлы, убивает временные и так далее;

    Alt+SysRq+I — посылает сигнал SIGKILL всем процессам, кроме init. В отличие от предыдущего сигнала, SIGKILL грубо прерывает выполнение программы, не выполняя после этого «зачистку».

    Alt+SysRq+L — посылает сигнал SIGKILL всем процессам, включая init. В этом случае система уходит в полный даун. Эту команду лучше не трогать.

    Alt+SysRq+S — запускает аварийную синхронизацию (запись кэша) всех примонтированных дисков. Позволяет избежать потери данных.

    Alt+SysRq+U — Перемонтировать все примонтированные файловые системы в режиме «только для чтения». Если операция прошла успешно, fsck не будет проверять файловые системы после «жесткого» перезапуска системы.

    Alt+SysRq+B — перезагрузка системы. Очень быстрая, потому что этапы синхронизации и размонтирования пропускаются. Употреблять только в самых крайних случаях. С таким же успехом можете нажать на Reset.

    Alt+SysRq+O — действует на систему подобно выстрелу в висок. Никакой синхронизации буфера, размонтирования и прочего. Сразу гасится свет, то бишь вырубается питание. Поэтому до нажатия этих клавиш следует синхронизировать буфер (Alt+SysRq+S), затем перемонтировать файловые системы в режиме «только для чтения» (Alt+SysRq+U) и только потом — Alt+SysRq+O. И запомните — сначала синхронизация, потом размонтирование, однако не наоборот.