Если зависает Windows, пользователь делает некие телодвижения, а затем, убедившись в «тщете и суетности этого мира», со спокойным сердцем нажимает RESET. В Линуксе все обстоит иначе.
Начнем с того, что «подвесить» Линукс вполне реально, несмотря на стабильность системы. «Подвесить» взято в кавычки потому, что при кажущихся признаках капитального останова системы ядро продолжает работать. Давайте разберем несколько типичных ситуаций и посмотрим, как можно с честью выходить из них. Предлагаю вам ощутить себя в нескольких героических ипостасях.
Ипостась первая — Зевс-Громовержец
Предположим, что вы работаете в KDE. У вас нет KDE? Ничего не могу поделать. KDE — самая популярная графическая оболочка, поэтому плясать мы будем вокруг нее. Итак, вы мирно работаете в KDE, запускаете какую-то шаманским образом откомпилированную прогу, и она повисает. Можно запустить менеджер процессов (Ctrl+Esc) и прибить замороженное приложение, но я предпочитаю более скоростной способ. Нажимаю Ctrl+Alt+Esc, и курсор превращается в молнию! Теперь достаточно щелкнуть ею по зависшему окну, и оно исчезнет.
Ипостась вторая — Киллер Икс.
В него вам придется перевоплотиться, когда зависнуть «иксы» — графическая оболочка. Или не зависнут, однако будут себя вести вызывающе и неадекватно. Например, самовольно уползет в свою нору мышь, не подавая больше признаков жизни, или оболочка упорно откажется закрыть себя и собственные окна. Знаете, ее можно понять — к десктопу приросла, — но ведь это противоестественно.
Рецепт прост, как ящик пива. В любой иксовой оболочке, будь то KDE, Gnome или BlackBox, срабатывает комбинация клавиш Ctrl+Alt+Backspace. Сразу после их нажатия следует низвержение экрана во тьму. Ничего страшного. Это всего лишь консоль. Иксы закрыты, можете снова их запускать — startx.
Ипостась третья — Терминатор
Могут произойти и совсем скверные вещи. Например, у вас компьютер подключен к бесперебойнику, а монитор — нет. Когда свет отрубают и наступает временный Апокалипсис, компьютер продолжает работать какое-то время, питаясь от аккумуляторов, а вот монитор гаснет. Между тем, вы же в поте лица своего трудились в KWord'е над неким громадным текстовым файлом и не успели его сохранить.
Положим, сохранить вы успеваете — вот оно, судорожно-резвое нажатие на Ctrl+S. Но ведь реальное сохранение могло не произойти! Линукс кэширует данные и периодически сбрасывает их на диск. Последняя операция носит титул синхронизации буфера. Ее можно запустить вручную, нажав на Alt+SysRq+S. Напомню, что SysRq — это та же клавиша, что и PrintScreen. SysReq расшифровывается как System Request, то бишь «системный запрос». Итак, нажав вышеприведенную комбинацию, мы синхронизировали буфер.
Но ведь нужно еще выйти из системы как полагается. Ведь когда, допустим, вы выходите из дому, забыв выключить газ, свет и воду, то могут произойти всякие... Неприятные вещи, скажем так.
Хорошо, если в момент выключения монитора вы были в консоли, в ее командной строке — тогда вы можете быстро набрать вслепую команду halt, которая синхронизирует буфер, размонтирует файловые системы и, наконец, выключит питание компьютера. А если вы в графической оболочке? Если вы не помните ее «горячие клавиши» для выхода или перезагрузки (если оболочка вообще поддерживает таковые)?
Здесь мы снова сделаем уклон в сторону KDE. Есть, есть в ней такие волшебные клавиши. Нужно только их настроить. Для этого запустите Центр управления KDE и перейдите в нем в LookNFeel > Ярлычки. Теперь, на странице Глобальные привязки найдите пункт Остановить без запроса на подтверждение и назначьте ему свое сочетание клавиш.
Но это в KDE. А нет ли чего-нибудь глобального, для других файловых менеджеров. И чтобы в консоли это тоже работало? Есть! Можете записать себе на бумажке или вырезать кусочек статьи и присобачить его на стенку. А еще лучше — держите весь журнал под рукой. Итак, список волшебных клавиш, действующих во время шторма:
Alt+SysRq+O — действует на систему подобно выстрелу в висок. Никакой синхронизации буфера, размонтирования и прочего. Сразу гасится свет, то бишь вырубается питание. Поэтому до нажатия этих клавиш следует синхронизировать буфер (Alt+SysRq+S), затем размонтировать файловые системы (Alt+SysRq+U) и только потом нажимать страшное Alt+SysRq+O. И запомните — сначала синхронизация, потом размонтирование, однако не наоборот;
Alt+SysRq+K — эта комбинация носит название Secure Access Key (SAK). Она убивает все запущенные в текущей виртуальной консоли процессы. Даже глазом моргнуть не успеете. Полезно использовать, когда зависла некая программа и даже не позволяет вам переключиться в другую виртуальную консоль. Исторически SAK предназначался для других целей. Применять его советовали пользователям перед тем как залогиниться в систему. Дело в том, что довольно легко написать программу или скрипт, эмулирующие логин. Неискушенный пользователь вводит свой логин и пароль, а «троянский конь» сохраняет их в надежном месте, чтобы злоумышленник воспользовался плодами вашей доверчивости. Если же юзер перед тем как зайти в систему нажмет SAK, то прибьет трояна и получит нормальное, «оригинальное» приглашение системы.
А вот еще три сходные по действию функции-киллеры:
Alt+SysRq+E — посылает сигнал SIGTERM всем процессам, кроме init. Сигнал SIGTERM означает, что система завершает некий процесс и прибирает за ним мусор — закрывает открытые процессом файлы, убивает временные и так далее;
Alt+SysRq+I — посылает сигнал SIGKILL всем процессам, кроме init. В отличие от предыдущего сигнала, SIGKILL грубо прерывает выполнение программы, не выполняя после этого «зачистку».
Здесь уместно сделать небольшое отступление и рассказать немного о сигналах, с помощью которых можно управлять выполнением программ, а точнее — их завершением. Сначала нам нужно получить PID программы. Аббревиатуру PID следует толковать как Process Identifier, то бишь идентификатор процесса. Наберем в консоли следующую команду:
После ее выполнения на экран будет выведена информация о запущенных в текущей консоли процессах. Примерно вот так:
Из этого следует, что в во время запуска команды ps были активны следующие процессы: bash (интерпретатор оболочки), сама ps и удобный консольный калькулятор bc. В первом столбце таблицы видим интересующие нас идентификаторы процессов. Зная их, можем послать процессу некий сигнал. Допустим, мы хотим прервать выполнение bc. Попробуем сделать это вежливо, послав SIGTERM:
В ответ — молчание... Проверяем активные процессы командой ps.
Как видим, калькулятор все еще висит в памяти. Тогда попросим его более настойчиво, уже с помощью сигнала SIGKILL:
И что же? На экране появляется сообщение:
С чем и поздравляю — процесс убит наповал. Вот что называется «магией на кончиках пальцев». Далее:
Alt+SysRq+L — посылает сигнал SIGKILL всем процессам, включая init. В этом случае система уходит в полный даун. Эту команду лучше не трогать. Смерть от напалма!
Alt+SysRq+B — перезагрузка системы. Очень быстрая, потому что этапы синхронизации и размонтирования пропускаются. Употреблять только в самых крайних случаях. С таким же успехом можете нажать на Reset.
Alt+SysRq+R — изменение режима клавиатуры с Raw в XLAT. Например, после краха видеоплейера или игры, работающего с популярной библиотекой SVGALib, вы могли заметить, что консоль не реагирует на нажатия клавиш. Вот это средство и поможет!
Под конец статьи затрону тему, которая напрямую связана с проблемами функционирования программ. Говоря проще — с вылетами. Речь идет о coredump'ах — файлах довольно ощутимых размеров, которые создаются после аварийного завершения программы. Читать coredump'ы может быть интересно программистам, для простых же пользователей они совершенно бесполезны и только засоряют винчестер. Как бороться?
Открываем в текстовом редакторе файл bashrc, который лежит в директории /etc. В его конец добавляем всего одну строчку: