Linux sysrq紧急魔术键handle_sysrq调度
Linux sysrq紧急魔术键handle_sysrq调度SysRqSystem Request是Linux内核提供的一套紧急管理功能组合键即使在系统挂起或无响应时仍能通过键盘输入或/proc接口执行关键操作。其核心调度函数是handle_sysrq接收一个字符参数并查找对应的操作处理函数。SysRq操作通过sysrq_key_op描述每个操作包含处理函数、帮助文本和启用掩码struct sysrq_key_op {void (*handler)(int keys);const char *help_msg;const char *action_msg;int enable_mask;};所有操作被组织在sysrq_key_table中static struct sysrq_key_op *sysrq_key_table[SYSRQ_KEY_TABLE_SIZE] {sysrq_loglevel_ops, /* 0-9 日志级别 */...sysrq_reboot_ops, /* b 立即重启 */sysrq_crashdump_ops, /* c 触发crash dump */sysrq_term_ops, /* e 向所有进程发送SIGTERM */sysrq_moom_ops, /* f 调用oom killer */sysrq_help_ops, /* h 显示帮助 */sysrq_kill_ops, /* i 向所有进程发送SIGKILL */sysrq_thaw_ops, /* j 解冻所有文件系统 */sysrq_ftrace_dump_ops, /* l ftrace dump */sysrq_sync_ops, /* s 同步所有挂载的文件系统 */sysrq_showtask_ops, /* t 显示任务信息 */sysrq_unmount_ops, /* u 重新挂载所有文件系统为只读 */sysrq_showstate_ops, /* p 显示寄存器 */};handle_sysrq函数根据传入的key从表中查找对应的ops并调用handlervoid handle_sysrq(int key){struct sysrq_key_op *op_p;int orig_log_level;unsigned long flags;if (sysrq_on())__handle_sysrq(key, false);}static void __handle_sysrq(int key, bool check_mask){struct sysrq_key_op *op_p;int orig_log_level;int i;if ((key 36) (key 126))i key - 36; /* 将ASCII码映射为表索引 */elsei key;op_p sysrq_key_table[i];if (!op_p || !op_p-handler)return;/* 检查当前sysrq掩码是否允许该操作 */if (!sysrq_on_mask(op_p-enable_mask))return;pr_info(SysRq : %s\n, op_p-action_msg);/* 提高日志级别确保消息可见 */orig_log_level console_loglevel;console_loglevel CONSOLE_EXTENDED;op_p-handler(key);console_loglevel orig_log_level;}以sysrq_reboot_ops为例reboot操作通过emergency_restart绕过正常关机流程直接重置硬件static struct sysrq_key_op sysrq_reboot_ops {.handler sysrq_handle_reboot,.help_msg reboot(b),.action_msg Emergency Reboot,.enable_mask SYSRQ_ENABLE_BOOT,};static void sysrq_handle_reboot(int key){emergency_restart();}sysrq_handle_crash直接触发panic用于测试kdump配置static void sysrq_handle_crash(int key){char *killer NULL;pr_info(sysrq: Trigger a crash\n);*killer 1; /* 制造NULL指针解引用 */}SysRq触发路径有三个入口1. 键盘中断当用户按下AltSysRq命令键时键盘驱动调用handle_sysrq。在AT键盘驱动中中断处理函数kbd_keycode识别到SysRq按下事件后设置sysrq_alt状态static void kbd_keycode(struct vc_data *vc, unsigned char keycode, ...){if (keycode KEY_SYSRQ) {sysrq_alt 1;return;}if (sysrq_alt keycode ! KEY_LEFTALT keycode ! KEY_RIGHTALT) {handle_sysrq(keycode);sysrq_alt 0;return;}}2. /proc/sysrq-trigger接口写入字符直接触发无需键盘硬件支持static ssize_t write_sysrq_trigger(struct file *file,const char __user *buf, size_t count, loff_t *ppos){char c;if (get_user(c, buf))return -EFAULT;handle_sysrq(c);return count;}3. 串口SysRq在串口终端中输入break信号序列后跟随命令字符。可调节的sysrq掩码通过/proc/sys/kernel/sysrq控制决定哪些功能可用。掩码值按位分配1为所有功能0为禁用大于1时按bitmask精细控制#define SYSRQ_ENABLE_LOG (1 0)#define SYSRQ_ENABLE_SYNC (1 1)#define SYSRQ_ENABLE_REMOUNT (1 2)#define SYSRQ_ENABLE_SIGNAL (1 3)#define SYSRQ_ENABLE_BOOT (1 4)#define SYSRQ_ENABLE_RT (1 5)在SMP系统中handle_sysrq被设计为只有接收到SysRq的CPU执行操作。对于像t显示任务信息这样的操作每个CPU可能只看到部分信息但整体设计优先考虑操作的原子性和低延迟。

相关新闻

Linux程序地址空间与虚拟内存管理深度解析

Linux程序地址空间与虚拟内存管理深度解析

1. Linux程序地址空间深度解析作为一名在Linux系统开发领域摸爬滚打十年的老手,我经常被问到一个基础但至关重要的问题:"程序运行时,内存到底是怎么安排的?"今天我们就来彻底拆解Linux下的程序地址空间,这个…

2026/7/25 2:26:15 阅读更多 →
Linux sys_futex futex_wake与hashbucket锁定

Linux sys_futex futex_wake与hashbucket锁定

Linux sys_futex futex_wake与hashbucket锁定futex(2) 系统调用是 Linux 实现高效用户态同步的核心机制。与所有经典同步原语不同的是,futex 在无竞争时完全在用户态通过原子操作完成,仅在需要等待或唤醒时进入内核。sys_futex 的入口是 do_futex&#x…

2026/7/25 14:42:04 阅读更多 →
Windows平台消息防撤回技术深度解析:通讯软件安全完全手册

Windows平台消息防撤回技术深度解析:通讯软件安全完全手册

Windows平台消息防撤回技术深度解析:通讯软件安全完全手册 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://gitcod…

2026/7/25 8:41:34 阅读更多 →

最新新闻

SmartAny使用指南:SmartCodable如何优雅处理Any类型

SmartAny使用指南:SmartCodable如何优雅处理Any类型

SmartAny使用指南:SmartCodable如何优雅处理Any类型 【免费下载链接】SmartCodable SmartCodable is a data parsing library built on Swift’s Codable, designed for simple usage and strong real-world compatibility. It gracefully handles missing fields, …

2026/7/25 21:41:31 阅读更多 →
MARS框架三大实例:MARS-AdamW、MARS-Lion与MARS-Shampoo对比分析

MARS框架三大实例:MARS-AdamW、MARS-Lion与MARS-Shampoo对比分析

MARS框架三大实例:MARS-AdamW、MARS-Lion与MARS-Shampoo对比分析 【免费下载链接】MARS The official implementation of MARS: Unleashing the Power of Variance Reduction for Training Large Models 项目地址: https://gitcode.com/gh_mirrors/mars11/MARS …

2026/7/25 21:41:31 阅读更多 →
基于YOLOv6的多模态视觉分析系统设计与优化

基于YOLOv6的多模态视觉分析系统设计与优化

1. 项目概述:多模态视觉分析系统的全栈实现这个项目本质上是一个集成了计算机视觉领域五大核心任务(目标检测、图像分割、姿态估计、目标跟踪、视频推理)的工业级解决方案,采用YOLOv6算法作为基础框架,通过Streamlit构…

2026/7/25 21:41:31 阅读更多 →
2026年AI远控工具实战指南:8款工具部署、测试与集成详解

2026年AI远控工具实战指南:8款工具部署、测试与集成详解

远程控制软件大家都不陌生,但“AI远控”这个概念,你试过吗?当大模型的能力被整合进远程控制流程,事情就开始变得不一样了。它不再是简单的画面传输和鼠标键盘映射,而是能帮你预判问题、自动执行脚本、甚至用自然语言描…

2026/7/25 21:41:31 阅读更多 →
FastComposer论文精读:IJCV顶刊背后的创新思路与技术突破

FastComposer论文精读:IJCV顶刊背后的创新思路与技术突破

FastComposer论文精读:IJCV顶刊背后的创新思路与技术突破 【免费下载链接】fastcomposer [IJCV] FastComposer: Tuning-Free Multi-Subject Image Generation with Localized Attention 项目地址: https://gitcode.com/gh_mirrors/fa/fastcomposer FastCompo…

2026/7/25 21:41:31 阅读更多 →
Vue3 Dnd实战案例:从简单拖拽到复杂排序组件的完整指南

Vue3 Dnd实战案例:从简单拖拽到复杂排序组件的完整指南

Vue3 Dnd实战案例:从简单拖拽到复杂排序组件的完整指南 【免费下载链接】vue3-dnd React Dnd implementation in Vue Composition-api. 项目地址: https://gitcode.com/gh_mirrors/vu/vue3-dnd Vue3 Dnd是基于Vue Composition API实现的React Dnd移植版本&am…

2026/7/25 21:40:30 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 5:08:22 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 5:13:53 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻