前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >/proc/sysrq-trigger 详解

/proc/sysrq-trigger 详解

作者头像
Jasonangel
发布2022-10-25 21:20:26
2.6K0
发布2022-10-25 21:20:26
举报
文章被收录于专栏:嵌入式Linux系统开发

/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 */
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式Linux系统开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、用法
  • 2、实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档