/proc/sysrq-trigger 详解

2022-10-25 21:20:26 浏览数 (1)

/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 */
}

0 人点赞