Список возможных комбинаций клавиш можно получить с консоли путем нажатия комбинации клавиш SysRq-h
. Комбинация клавиш SysRq
-s выполняет синхронизацию не сохраненных буферов файловых систем на диск, комбинация SysRq-u
размонтирует все файловые системы, a SysRq-b
— перегружает машину. Последовательное использование этих комбинаций клавиш позволяет более безопасно перегрузить машину, которая зависла, чем простое нажатие кнопки reset
.
Если машина заблокирована очень сильно, то она может не отвечать на магические комбинации клавиш SysRq
, или соответствующая операция не будет выполнена. Если же повезет, то эти комбинации клавиш смогут помочь при отладке, а также сохранить данные. В табл. 18.2 приведен список поддерживаемых команд SysRq
.
Таблица 18.2. Список поддерживаемых команд SysRq
Команда | Описание |
---|---|
SysRq-b | Перегрузить машину (reboot) |
SysRq-e | Послать сигнал SIGTERM всем процессам, кроме процесса init |
SysRq-h | Отобразить на консоли помощь по использованию комбинаций клавиш SysRq |
SysRq-i | Послать сигнал SIGKILL всем процессам, кроме процесса init |
SysRq-k | Клавиша безопасного доступа: завершить все процессы, связанные с текущей консолью |
SysRq-l | Послать сигнал SIGKILL всем процессам, включая процесс init |
SysRq-m | Отобразить на консоли дамп информации по использованию памяти |
SysRq-o | Завершить работу машины (shutdown) |
SysRq-p | Отобразить на консоли дамп регистров памяти |
SysRq-r | Отключить прямой режим работы клавиатуры (raw mode) |
SysRq-s | Синхронизировать данные смонтированных файловых систем с дисковыми устройствами |
SysRq-t | Отобразить на консоли дамп информации о заданиях |
SysRq-u | Размонтировать все смонтированные файловые системы |
В файле Documentation/sysrq.txt
, который находится в каталоге исходных кодов ядра, приводится более полное описание. Реализация поддержки магической комбинации клавиш находится в файле drivers/char/sysrq.с
. Магические комбинации клавиш SysRq
— жизненно необходимый инструмент, который помогает в отладке и сохранении "гибнущей" системы, так как предоставляет большие возможности для любого пользователя при работе с консолью. Тем не менее необходимо соблюдать осторожность при его использовании на критичных машинах. Если же машина используется для разработок, то польза от этих команд огромная.
Сага об отладчике ядра
Многие разработчики ядра давно высказываются о необходимости встроенного в ядро отладчика. К сожалению, Линус не желает видеть отладчик ядра в своем дереве исходного кода, Он уверен, что использование программ-отладчиков приводит к плохому исправлению ошибок неправильно информированными разработчиками. Никто не может поспорить с его логикой — исправления ошибок, построенные на основании хорошего понимания кода скорее всего будут верными. Тем не менее большинство разработчиков ядра все же нуждаются в официальном отладчике, встроенном в ядро. Поскольку такая возможность навряд ли появится в ближайшее время, то взамен было разработано несколько заплат, которые добавляют поддержку отладчика в стандартном ядре. Не смотря на то, что это внешние и неофициальные заплаты, они являются мощными инструментами с высокой функциональностью. Перед тем, как обращаться к этим решениям, посмотрим, на сколько нам может помочь стандартный отладчик ОС Linux — gdb.
Использование отладчика gdb
Для того, чтобы мельком заглянуть внутрь работающего ядра можно использовать стандартный отладчик GNU. Запуск отладчика для работы с ядром почти ни чем не отличается от отладки выполняющегося процесса.
gdb vmlinux /proc/kcore
Файл vmlinux
— это декомпрессированный исполняемый образ ядра, который хранится в корне каталога исходных кодов, где выполнялась сборка выполняющегося ядра. Сжатые файлы zImage
, или bzImage
использовать нельзя.
Опциональный параметр /proc/kcore
исполняет роль файла core
, чтобы позволить отладчику читать из памяти выполняющегося ядра. Чтобы иметь возможность читать этот файл, необходимо иметь права пользователя root.