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/21 4:28:31阅读更多 →
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/21 4:28:31阅读更多 →
AI时代程序员的技术危机与生存策略

AI时代程序员的技术危机与生存策略

1. 当代码审查变成AI生成的阅读理解题上周五下午,我正对着GitHub上那个标着"紧急!生产环境修复"的PR发呆。屏幕上那段被标记为"需要改进"的代码,赫然是上周我刚用Copilot生成的解决方案。现在它正被另一位同事用ChatGPT重…

2026/7/21 4:26:31阅读更多 →
CH32V003fun完整教程:从零开始掌握10美分RISC-V微控制器开发

CH32V003fun完整教程:从零开始掌握10美分RISC-V微控制器开发

CH32V003fun完整教程:从零开始掌握10美分RISC-V微控制器开发 【免费下载链接】ch32v003fun Open source minimal stack for the ch32 and ch5xx WCH RISC-V Microcontrollers 项目地址: https://gitcode.com/gh_mirrors/ch/ch32v003fun CH32V003fun是一款专为…

2026/7/21 15:19:25阅读更多 →
CentOS 6.5 iso系统定制

CentOS 6.5 iso系统定制

CentOS 6.5 iso系统定制前言更改CentOS6.5背景图片、CentOS标题为DntOS,总之就是用ISO安装或者安装后的系统启动时不能有CentOS标志。ISO光盘目录介绍: (1)isolinux 目录存放光盘启动时的安装界面信息。 (2&#xff09…

2026/7/21 15:19:25阅读更多 →
突破性时间序列异常检测方案:Anomaly-Transformer核心技术深度解析

突破性时间序列异常检测方案:Anomaly-Transformer核心技术深度解析

突破性时间序列异常检测方案:Anomaly-Transformer核心技术深度解析 【免费下载链接】Anomaly-Transformer About Code release for "Anomaly Transformer: Time Series Anomaly Detection with Association Discrepancy" (ICLR 2022 Spotlight), https://…

2026/7/21 15:19:25阅读更多 →
终极视频修复指南:使用untrunc轻松恢复损坏的MP4视频文件

终极视频修复指南:使用untrunc轻松恢复损坏的MP4视频文件

终极视频修复指南:使用untrunc轻松恢复损坏的MP4视频文件 【免费下载链接】untrunc Restore a truncated mp4/mov. Improved version of ponchio/untrunc 项目地址: https://gitcode.com/gh_mirrors/un/untrunc 你是否遇到过珍贵视频突然无法播放的绝望时刻&…

2026/7/21 15:19:25阅读更多 →
FPGA全链路数据流加速技术解析与应用实践

FPGA全链路数据流加速技术解析与应用实践

1. FPGA加速系统的行业背景与专利价值FPGA(现场可编程门阵列)作为一种可重构硬件,近年来在数据处理领域展现出独特优势。国投智能与美亚柏科联合申请的这项专利,核心在于利用FPGA实现全链路数据流加速,这背后反映的是当…

2026/7/21 15:19:25阅读更多 →
构建高性能WebSocket服务:异步通信的架构设计与毫秒级延迟实现

构建高性能WebSocket服务:异步通信的架构设计与毫秒级延迟实现

构建高性能WebSocket服务:异步通信的架构设计与毫秒级延迟实现 【免费下载链接】websockets Library for building WebSocket servers and clients in Python 项目地址: https://gitcode.com/gh_mirrors/we/websockets WebSockets项目为Python开发者提供了构…

2026/7/21 15:17:25阅读更多 →
Go语言静态资源打包方案对比与实践指南

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

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

2026/7/21 0:51:49阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

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

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

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

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

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

2026/7/21 0:51:49阅读更多 →
Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

📌教程适配:OpenClaw v2.7.9 | 兼容 Windows10/11、macOS 双系统 📖前言 当下各类本地 AI 工具层出不穷,多数产品仅能完成文字问答交互,很难直接操控电脑执行实际操作。OpenClaw,业内常称小龙虾 AI&#…

2026/7/21 0:01:46阅读更多 →
Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

聊《一次Codex项目复盘,问题最后出在流程而不是模型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&…

2026/7/21 0:01:46阅读更多 →
手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

大家好,还是我。前几期带大家做了心情日记本和可视化大屏,后台有朋友留言:“能不能教点好玩的?我想做游戏,但一行代码都不会。”行,这期就安排。今天的目标:从零做一个五子棋游戏。 带AI对战、三…

2026/7/21 0:03:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/20 22:51:39阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/20 18:51:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/20 18:51:18阅读更多 →