SysRq

Pause

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) для определения актуального терминала.

Примечания

  1. ↑ What is the SysRq key for? comp.os.msdos.programmer FAQ. Дата обращения: 8 января 2008. Архивировано 10 ноября 2018 года.
  2. ↑ Dan Gookin. PCs For Dummies Quick Reference. — P. 192. «Dead keys… SysRq»
  3. ↑ Ralf Brown's Interrupt List. Дата обращения: 8 января 2008. Архивировано 19 июня 2016 года.
  4. ↑ PC Mag 25 Jun 1991 (25 июня 1991). Дата обращения: 21 января 2014. Архивировано 21 января 2014 года.
  5. ↑ Original IBM PC Product fact sheet. IBM Information Systems Division (12 августа 1981). Дата обращения: 13 января 2010. Архивировано 20 августа 2010 года.
  6. ↑ Returning Control to CodeView. Microsoft Knowledge Base. Дата обращения: 8 января 2008. Архивировано 8 ноября 2008 года.
  7. ↑ MicroVGA datasheet. Дата обращения: 17 января 2014. Архивировано 15 октября 2012 года.
  8. ↑ Barnes, Jesse DRM: i915: add mode setting support. Git. Kernel (7 ноября 2008). Дата обращения: 31 августа 2013. Архивировано 23 июня 2020 года.
  9. ↑ Linux Magic System Request Key Hacks (13 сентября 2021). Дата обращения: 25 сентября 2022. Архивировано 6 октября 2022 года.
  10. ↑ Recovering from Sys Rq + r (англ.). Дата обращения: 20 июня 2024. Архивировано 20 июня 2024 года.

Литература

Категории

Pause