Ответ на вопрос
SysRq
SysRq или SysReq (сокращение от англ. System Request) — клавиша на клавиатуре для совместимых с IBM PC компьютеров, впервые появившаяся в модели PC/AT и не имеющая стандартного назначения[1][2]. Эта клавиша изначально применялась на клавиатурах терминалов типа IBM 3270 для мейнфреймов IBM System/370, где использовалась для непосредственного ввода команд операционным системам VM/370 или MVS.
В современных операционных системах клавиша SysRq может быть активирована для специальных целей. В 84-клавишной версии клавиатуры IBM PC/AT SysRq существовала как самостоятельная клавиша; в современных моделях она сочетана с клавишей Print Screen.
История
84-я клавиша SysRq была добавлена компанией IBM в клавиатуру для IBM PC/AT, чтобы обеспечить вызов низкоуровневых функций операционной системы без риска конфликта с существующим программным обеспечением. Для поддержки клавиши было добавлено программное прерывание BIOS под номером 0x15, подфункция 0x85[3][4], позволявшее операционной системе получать сигнал о нажатии или отпускании клавиши SysRq. В отличие от большинства других клавиш, нажатие SysRq не приводило к добавлению кода в буфер клавиатуры.
Считается, что низкоуровневая реализация SysRq предназначалась для переключения между операционными системами. В начале 1980-х годов на IBM-PC обычно запускали три системы: PC DOS, CP/M-86 и UCSD p-System[5], а с 1983—1984 годов появилась Xenix.
Целью введения отдельной клавиши было также обходить различные низкоуровневые TSR-программы, которые работали напрямую с клавиатурой, минуя ОС, и использовались для создания подобных «горячих клавиш».
Применение
В ОС Windows клавиша SysRq, в сочетании с Alt (фактически PrtScr), копирует изображение активного окна в буфер обмена.
Компания Microsoft использовала SysRq в нескольких отладочных средствах — как на уровне ОС, так и приложений. Некоторые версии отладчика CodeView применяли эту клавишу для прерывания выполняющейся программы и перехода к отладке[6]. В удалённом отладчике ядра Windows NT комбинация Ctrl+SysRq, Ctrl+SysRq использовалась для включения режима отладки ядра.
В персональных компьютерах Hyundai/Hynix Super-16 одновременное нажатие Ctrl+SysRq приводило к холодной перезагрузке, в том числе в случаях, когда Ctrl+Alt+Del уже не срабатывала.
Во встраиваемых системах изредка SysRq непосредственно переключает сигнал RESET# в низкий уровень[7].
SysRq в UNIX/Linux
Клавиша SysRq — единственный прямой канал обращения к ядру ОС, который функционирует всегда, пока работает ядро, так как сочетания перехватываются непосредственно кодом драйвера клавиатуры (см. Magic SysRq key). С помощью определённых сочетаний клавиш можно принудительно сбрасывать данные на диски, перемонтировать все файловые системы в режим «только чтение», перезагружать систему или перезапускать графическую подсистему даже при её зависании.
Использование
Перед использованием следует убедиться, что функция клавиши включена: опция CONFIG_MAGIC_SYSRQ в конфигурации ядра должна быть равна Y (например, в стандартном ядре Debian это так). Для вызова действия необходимо нажать, удерживая Alt и SysRq, одну из командных клавиш. В большинстве графических сред (GNOME, KDE и др.) нажатие PrtScr/SysRq обычно только создаёт скриншот, и следующая команда может быть не перехвачена ядром. Для обхода этого удерживайте также Ctrl, то есть полная комбинация — Ctrl + Alt + SysRq + буква-команда. Если нажать не командную клавишу, а другую, в текстовой консоли (обычно терминал 10) будет выведена краткая справка о возможностях SysRq — полезный способ удостовериться, что параметр CONFIG_MAGIC_SYSRQ активен в ядре.
Список команд SysRq в Linux
Одновременное нажатие клавиш Alt + SysRq + буква.
Если функция SysRq активируется через Fn, следует зажать Alt + Fn + SysRq, затем отпустить Fn и набрать букву-команду.
| Действие | QWERTY | Dvorak | AZERTY | Colemak |
|---|---|---|---|---|
| Установка уровня журнала консоли (уровня подробности сообщений ядра) | 0 — 9 | 0 — 9 | 0 — 9 (без ⇧ Shift) |
0 — 9 |
| Мгновенная перезагрузка системы без размонтирования и синхронизации файловых систем | b | x | b | b |
| Вызов аварийного дампа (crashdump), если настроен | c | j | c | c |
| Показ всех удерживаемых в данный момент блокировок (требует CONFIG_LOCKDEP) | d | e | d | s |
| Посылка сигнала SIGTERM всем процессам, кроме init (PID 1) | e | . | e | f |
| Вызов oom_kill для убийства ресурсоёмкого процесса при нехватке памяти | f | u | f | t |
| Для Kernel Mode Setting — переключение на консоль фреймбуфера ядра[8] Если настроен отладчик ядра kdb — вход в него |
g | i | g | d |
| Справка по SysRq на консоль Все нефункциональные клавиши также вызывают это поведение |
h | d | h | h |
| Посылка SIGKILL всем процессам, кроме init | i | c | i | u |
| Разморозка файловых систем, если использовался FIFREEZE | j | h | j | n |
| Завершение всех процессов на активной консоли (например, X и SVGAlib) | k | t | k | e |
| Показ обратной трассировки стека всех активных процессоров | l | n | l | i |
| Показ статуса памяти на консоль | m | m | , | m |
| Сброс nice для всех процессов с высоким приоритетом и реального времени | n | b | n | k |
| Завершение работы (shutdown) | o | r | o | y |
| Показ текущих регистров и флагов на консоль | p | l | p | ; |
| Показ всех активных таймеров высокого разрешения и источников синхронизации | q | ' | a | q |
| Перевод клавиатуры из режима raw в режим xlate | r | p | r | p |
| Синхронизация всех подключённых файловых систем | s | o | s | r |
| Список текущих задач (процессов) | t | y | t | g |
| Перемонтирование файловых систем в режим только для чтения | u | g | u | l |
| Восстановление консоли фреймбуфера; на ARM — дамп ETM-буфера |
v | k | v | v |
| Показ списка заблокированных задач (D state) | w | , | z | w |
| Используется интерфейсом xmon на PowerPC. Глобальные регистры PMU на sparc64. Сброс всех записей TLB на MIPS[9] |
x | q | x | x |
| Показ глобальных регистров ЦП (специфично для SPARC-64) | y | f | y | j |
| Дамп буфера трассировки ftrace | z | ; | w | z |
| Alt + SysRq + 0-9 | loglevel0-9 — изменение уровня логирования ядра (0 — только критика, 8 — максимально подробно); |
| Alt + SysRq + B | reBoot — мгновенная перезагрузка (аналог кнопки RESET, без синхронизации/размонтирования файловых систем); |
| Alt + SysRq + C | Crashdump — директивный kexec для дампа состояния; |
| Alt + SysRq + D | holDs — список всех текущих блокировок файлов или устройств; |
| Alt + SysRq + E | tErm — сигнал SIGTERM всем процессам, кроме init; |
| Alt + SysRq + F | Full — вызов oom_kill для аварийного завершения приложения, потребляющего память (при полном истощении памяти); |
| Alt + SysRq + H | Help — список возможностей SysRq с выделением клавиши действия; |
| Alt + SysRq + I | KILL — сигнал SIGKILL всем процессам кроме init; |
| Alt + SysRq + K | secure access Key — завершение всех процессов на активной консоли (для остановки X-сервера и др.); |
| Alt + SysRq + M | showMem — информация о памяти и использовании swap; |
| Alt + SysRq + N | Nice — сброс приоритета приложения реального времени; |
| Alt + SysRq + O | powerOff — корректное выключение системы (при поддержке); |
| Alt + SysRq + R | unRaw — возврат управления с X-сервера в консоль; |
| Alt + SysRq + S | Sync — попытка синхронизации всех файловых систем; |
| Alt + SysRq + T | showTasks — список активных задач/процессов; |
| Alt + SysRq + U | Unmount — перемонтирование файловых систем в только для чтения; |
| Alt + SysRq + W | shoW-blocked-tasks — все непрерываемые или ждущие задачи. |
Например, для аварийной синхронизации данных применяют последовательность Alt + SysRq + S, затем Alt + SysRq + U. После этого — сброс (или Alt + SysRq + B).
Стандартная рекомендация для корректной экстренной перезагрузки — удерживать Alt + SysRq и с интервалом 2—3 секунды нажать: R E I S U B
- unRaw — возврат контроля клавиатуре,
- tErm — SIGTERM всем процессам,
- kIll — SIGKILL всем процессам, не завершившимся,
- Sync — синхронизация файловых систем,
- Unmount — перемонтирование в «только чтение»,
- reBoot — собственно перезагрузка.
Существуют мнемоники для запоминания этой последовательности (см. Magic SysRq key).
Если доступ к терминалу невозможен, желаемое действие можно отправить через /proc/sysrq-trigger, например:
echo "h" > /proc/sysrq-trigger
выведет список сигналов в dmesg.
Для возвращения управления клавиатурой X-серверу после unRaw используйте команду с правами суперпользователя:
kbd_mode -s -C /dev/tty7[10]
Вместо tty7 используйте tty$(fgconsole) для определения актуального терминала.
Примечания
Литература
- System BIOS for IBM PC/XT/AT computers and compatibles : [англ.]. — Phoenix Technologies, Addison-Wesley Pub. Co., 1989.