Linux内核提供了一些与用户空间的通信机制,例如procfs
接口和sysfs
接口,大部分的这些接口都可以作为获取内核信息的手段。
但除了这些接口,内核也提供了专门的调试机制——系统请求键SysRq
。
SysRq
被内核称为“Magic SysRq key
”,即“神奇的系统请求键”。
简单来说,就是可以通过键盘的按键获取内核的信息,用于调试。相当于是一个快捷键。
要使用系统请求键SysRq
,内核配置选项中必须打开CONFIG_MAGIC_SYSRQ
CONFIG_MAGIC_SYSRQ=y
SysRq
键是复合键【Alt
+ SysRq
】,大多数键盘的SysRq
和PrtSc
键是复用的。
按住SysRq
复合键, 再输入第三个命令键, 可以执行相应的系统调试命令。例如,输入t
键, 可以得到当前运行的进程和所有进程的堆栈跟踪。回溯跟踪将被写到/var/log/messages
文件中。如果内核都配置好了, 系统应该己经转换了内核的符号地址。
键命令 | 说明 |
---|---|
SysRq-b | 重启机器 |
SysRq-e | 给init 之外的所有进程发送SIGTERM 信号 |
SysRq-i | 给init 之外的所有进程发送SIGKILL 信号 |
SysRq-k | 安全访问键:杀掉这个控制台上的所有进程 |
SysRq-l | 给包括init 在内的所有进程发送SIGKILL 信号 |
SysRq-m | 在控制台上显示内存信息 |
SysRq-o | 关闭机器 |
SysRq-p | 在控制台上显示寄存器 |
SysRq-r | 关闭键盘的原始模式 |
SysRq-s | 同步所有挂接的磁盘 |
SysRq-t | 在控制台上显示所有的任务信息 |
SysRq-u | 卸载所有已经挂载的磁盘 |
以上是系统请求键SysRq
命令的主要说明,更多的内容可以参考内核说明文档:Documentation/sysrq.txt
有些硬件平台可能不能使用SysRq
复合键,这种情况下,也可以通过/proc
接口进入系统请求状态。
因为在内核配置选项中,使能了CONFIG_MAGIC_SYSRQ
选项后,系统启动之后,就会生成/proc/sysrq-trigger
节点用于调试。
例如:
产生空指针panic事件,认为导致系统崩溃:
echo c > /proc/sysrq-trigger
导出当前CPU寄存器和标志位信息:
echo p > /proc/sysrq-trigger
在控制台上显示内存信息:
echo m > /proc/sysrq-trigger
echo输出的字符,其实就是第三个键的命令
系统请求键SysRq
主要用来辅助调试和拯救系统,在系统宕机或者运行不正常的时候,通过系统请求键SysRq
可以查询当前进程执行的状态,从而判断出错的进程和函数。
END
→点关注,不迷路←
文章引用微信公众号"嵌入式微处理器",如有侵权,请联系管理员删除!