/proc/sysrq-trigger 这个节点是最近调试稳定性的时候接触的,完整的内容可以参考内核目录下 /kernel-4.9/Documentation/sysrq.txt,这里只写出常用部分。
用该功能必须将内核中的 CONFIG_MAGIC_SYSRQ 配置选项打开,但一般的发行版本都将此选项关闭了,该功能主要是用于调试的,想体验该功能的重新配置下内核。
1、用法
代码语言:javascript复制echo b > /proc/sysrq-trigger
立即重启机器,而且不会将缓冲区同步到硬盘,也不会卸载已挂载的硬盘
代码语言:javascript复制echo c > /proc/sysrq-trigger
使系统崩溃,如果配置了crashdump,崩溃后会生成 dump 文件
代码语言:javascript复制echo d > /proc/sysrq-trigger
列出系统中所有被持有的锁
代码语言:javascript复制echo e > /proc/sysrq-trigger
向系统中除 init 外的所有进程发出 SIGTERM 信号
代码语言:javascript复制echo f > /proc/sysrq-trigger
调用 oom_kill 杀死内存的 hog 进程
代码语言:javascript复制echo g > /proc/sysrq-trigger
kgdb 会使用该项
代码语言:javascript复制echo h > /proc/sysrq-trigger
显示帮助信息
代码语言:javascript复制echo i > /proc/sysrq-trigger
向系统中除 init 外的所有进程发出 SIGKILL 信号
代码语言:javascript复制echo j > /proc/sysrq-trigger
Forcibly "Just thaw it" - filesystems frozen by the FIFREEZE ioctl
代码语言:javascript复制echo k > /proc/sysrq-trigger
Secure Access Key (SAK) Kills all programs on the current virtual console. NOTE: See important comments below in SAK section.
代码语言:javascript复制echo l > /proc/sysrq-trigger
显示现在所有活动 cpu 的堆栈
代码语言:javascript复制echo m > /proc/sysrq-trigger
将当前内存信息 dump 到终端
代码语言:javascript复制echo n > /proc/sysrq-trigger
用来使实时任务可以设置 nice 值
代码语言:javascript复制echo o > /proc/sysrq-trigger
关闭系统
代码语言:javascript复制echo p > /proc/sysrq-trigger
将寄存器和 flags dump 到终端
代码语言:javascript复制echo q > /proc/sysrq-trigger
Will dump per CPU lists of all armed hrtimers (but NOT regular timer_list timers) and detailed information about all clockevent devices
代码语言:javascript复制echo r > /proc/sysrq-trigger
Turns off keyboard raw mode and sets it to XLATE。
代码语言:javascript复制echo s > /proc/sysrq-trigger
将尝试同步所有已挂载的文件系统
代码语言:javascript复制echo u > /proc/sysrq-trigger
将当前任务的列表和他们信息输出到终端
代码语言:javascript复制echo v > /proc/sysrq-trigger
强制恢复 framebuffer console
代码语言:javascript复制echo w > /proc/sysrq-trigger
将进入 uninterrupted 状态的任务信息 dump 出来
代码语言:javascript复制echo x > /proc/sysrq-trigger
Used by xmon interface on ppc/powerpc platforms
代码语言:javascript复制echo y > /proc/sysrq-trigger
Show global CPU Registers [SPARC-64 specific]
代码语言:javascript复制echo z > /proc/sysrq-trigger
Dump the ftrace buffer
代码语言:javascript复制echo '0'-'9' > /proc/sysrq-trigger
Sets the console log level, controlling which kernel messages will be printed to your console. ('0', for example would make it so that only emergency messages like PANICs or OOPSes would make it to your console.)
2、实现
/kernel-5.18/drivers/tty/sysrq.c
代码语言:javascript复制static const struct sysrq_key_op *sysrq_key_table[62] = {
&sysrq_loglevel_op, /* 0 */
&sysrq_loglevel_op, /* 1 */
&sysrq_loglevel_op, /* 2 */
&sysrq_loglevel_op, /* 3 */
&sysrq_loglevel_op, /* 4 */
&sysrq_loglevel_op, /* 5 */
&sysrq_loglevel_op, /* 6 */
&sysrq_loglevel_op, /* 7 */
&sysrq_loglevel_op, /* 8 */
&sysrq_loglevel_op, /* 9 */
/*
* a: Don't use for system provided sysrqs, it is handled specially on
* sparc and will never arrive.
*/
NULL, /* a */
&sysrq_reboot_op, /* b */
&sysrq_crash_op, /* c */
&sysrq_showlocks_op, /* d */
&sysrq_term_op, /* e */
&sysrq_moom_op, /* f */
/* g: May be registered for the kernel debugger */
NULL, /* g */
NULL, /* h - reserved for help */
&sysrq_kill_op, /* i */
#ifdef CONFIG_BLOCK
&sysrq_thaw_op, /* j */
#else
NULL, /* j */
#endif
&sysrq_SAK_op, /* k */
#ifdef CONFIG_SMP
&sysrq_showallcpus_op, /* l */
#else
NULL, /* l */
#endif
&sysrq_showmem_op, /* m */
&sysrq_unrt_op, /* n */
/* o: This will often be registered as 'Off' at init time */
NULL, /* o */
&sysrq_showregs_op, /* p */
&sysrq_show_timers_op, /* q */
&sysrq_unraw_op, /* r */
&sysrq_sync_op, /* s */
&sysrq_showstate_op, /* t */
&sysrq_mountro_op, /* u */
/* v: May be registered for frame buffer console restore */
NULL, /* v */
&sysrq_showstate_blocked_op, /* w */
/* x: May be registered on mips for TLB dump */
/* x: May be registered on ppc/powerpc for xmon */
/* x: May be registered on sparc64 for global PMU dump */
NULL, /* x */
/* y: May be registered on sparc64 for global register dump */
NULL, /* y */
&sysrq_ftrace_dump_op, /* z */
NULL, /* A */
NULL, /* B */
NULL, /* C */
NULL, /* D */
NULL, /* E */
NULL, /* F */
NULL, /* G */
NULL, /* H */
NULL, /* I */
NULL, /* J */
NULL, /* K */
NULL, /* L */
NULL, /* M */
NULL, /* N */
NULL, /* O */
NULL, /* P */
NULL, /* Q */
NULL, /* R */
NULL, /* S */
NULL, /* T */
NULL, /* U */
NULL, /* V */
NULL, /* W */
NULL, /* X */
NULL, /* Y */
NULL, /* Z */
}