如何检查启用了哪些SysRq功能?


15

该文件/proc/sys/kernel/sysrq包含一个数字,例如:

  • 1 (启用所有SysRq命令),
  • 0 (禁用所有),
  • 或基数为10的正整数,用作二进制位掩码,从而启用功能的子集。

有人可以告诉我,当位掩码设置为时,允许/禁止使用哪些SysRq函数438吗?


$ cat /proc/sys/kernel/sysrq
438

Answers:


22

这些是可用的SysRq函数:

0 - disable every SysRq function.
1 - enable every SysRq function.
2 - enable control of console logging level
4 - enable control of keyboard (SAK, unraw)
8 - enable debugging dumps of processes etc.
16 - enable sync command
32 - enable remount read-only
64 - enable signalling of processes (term, kill, oom-kill)
128 - allow reboot/poweroff
256 - allow nicing of all RT tasks

438= 2 + 4 + 16 + 32 + 128 + 256,因此仅允许与这些数字关联的功能。阅读文档中的所有内容

如果转换438为基数2(110110110),则更容易看到。

1     1     0    1    1    0   1   1   0
^256  ^128  ^64  ^32  ^16  ^8  ^4  ^2  ^1

根据您的发行版,您也许可以知道是否CONFIG_MAGIC_SYSRQ使用以下命令编译了内核:

$ grep SYSRQ /boot/config-$(uname -r)

这对我在Ubuntu上有效。


嗯,这只是各个位掩码的线性组合。非常感谢。
2012年

一个后续措施:如果在执行Alt + SysRq +(命令键)时没有任何反应,那么我认为这意味着在安装内核时未启用sysrq。有没有一种简单的方法来检查sysrq是否已启用(例如,我可以找到CONFIG_MAGIC_SYSRQ某个地方的状态)吗?
user001

3
我添加了一种可能的检查方法CONFIG_MAGIC_SYSRQ
威廉·杰克逊

谢谢。也为我在Debian上工作。输出:(CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ_DEFAULT_MASK=0x01b6十六进制的01b6是十进制的438)。我想y它已经启用了。如果可以的话,我会给2票。
2012年

1
在许多Linux发行版中,配置保留在内核本身中,而不是在内核中/boot,因此check命令为zgrep SYSRQ /proc/config.gz(或gunzip -c /proc/config.gz | grep SYSRQ)。
user1686 2012年

2

这是一个Bash单线,它将为​​您打印启用的选项:

for i in $(seq 1 8); do (( ($(</proc/sys/kernel/sysrq) & $((1<<$i))) > 0 )) && echo $((1<<$i)); done

当位掩码设置为438时,允许/禁止使用哪些SysRq功能?

$ for i in $(seq 1 8); do (( (438 & $((1<<$i))) > 0 )) && echo $((1<<$i)); done
2
4
16
32
128
256

有关含义,请参阅William的答案


要启用所有选项,请运行:

echo 1 | sudo tee /proc/sys/kernel/sysrq

要使其持久,请运行:

echo kernel.sysrq=1 | sudo tee /etc/sysctl.d/20-sysrq.conf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.