Наши партнеры

UnixForum






Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

На главную -> MyLDP -> Тематический каталог -> Настройка системы

Висит? Снимем!

©1(224)/13.01.2003

(с)Петр 'Roxton' СЕМИЛЕТОВ

Если зависает 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, которая синхронизирует буфер, размонтирует файловые системы и, наконец, выключит питание компьютера. А если вы в графической оболочке? Если вы не помните ее <горячие клавиши> для выхода или перезагрузки (если оболочка вообще Рис. 1 поддерживает таковые)?

Здесь мы снова сделаем уклон в сторону KDE. Есть, есть в ней такие волшебные клавиши. Нужно только их настроить. Для этого запустите Центр управления KDE и перейдите в нем в LookNFeel > Ярлычки. Теперь, на странице Глобальные привязки найдите пункт Остановить без запроса на подтверждение и назначьте ему свое сочетание клавиш (Рис. 1).

Но это в 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 - перезагрузка системы. Очень быстрая, потому что этапы синхронизации и размонтирования пропускаются. Употреблять только в самых Рис. 2 крайних случаях. С таким же успехом можете нажать на Reset.

Alt+SysRq+R - изменение режима клавиатуры с Raw в XLAT. Например, после краха видеоплейера или игры, работающего с популярной библиотекой SVGALib, вы могли заметить, что консоль не реагирует на нажатия клавиш. Вот это средство и поможет!

Под конец статьи затрону тему, которая напрямую связана с проблемами функционирования программ. Говоря проще - с вылетами. Речь идет о coredump'ах - файлах довольно ощутимых размеров, которые создаются после аварийного завершения программы. Читать coredump'ы может быть интересно программистам, для простых же пользователей они совершенно бесполезны и только засоряют винчестер. Как бороться?

Открываем в текстовом редакторе файл bashrc, который лежит в директории /etc. В его конец добавляем всего одну строчку:

Этим мы ограничиваем размер создаваемых coredump'ов до нуля, тем самым предотвращая их появление. Чтобы команда вступила в силу, надо (в общем случае) перезагрузить систему. Проверим, получилось ли. Пример даю исходя из того, что вы работаете в KDE. Заходим в директорию с каким-нибудь текстовым файлом, из контекстного меню выбираем просмотр этого файла неким редактором. Теперь нажимаем Ctrl+Esc, чтобы вызывать Системный монитор (Рис. 2). В его списке делаем правый клик на имени редактора, чтобы вызвать контекстное меню. В нем активизируем пункт Послать сигнал. Появится меню сигналов, из которых следует выбрать SIGSEVG. Программа <вылетает>, а мы смотрим, появился ли coredump. Не появился. Очень хорошо.



Средняя оценка 4 при 1 голосовавших