如何使用单个命令引起内核恐慌?

Des*_*ume 87 command-line kernel kernel-panic

是否有可能使用单个命令行导致内核崩溃?

对于 sudoing 用户来说,最直接的此类命令是什么,对于普通用户来说又是什么(如果有的话)?

建议将某些内容作为命令的一部分进行下载的情况不算在内。

小智 104

FreeBSD:

sysctl debug.kdb.panic=1
Run Code Online (Sandbox Code Playgroud)

Linux(内核文档中的更多信息):

echo c > /proc/sysrq-trigger
Run Code Online (Sandbox Code Playgroud)

  • `echo c > /proc/sysrq-trigger` 在冻结 Linux 系统方面确实做得很好。但就个人而言,一个很好的黑屏死机讲述了调用堆栈的戏剧性发展,感觉就像一个更“规范”的内核恐慌。 (13认同)
  • 在 Linux 上,您可能必须先通过 `echo 1 > /proc/sys/kernel/sysrq` 才能使用 `echo c > /proc/sysrq-trigger`。 (7认同)

小智 35

mkdir /tmp/kpanic && cd /tmp/kpanic && printf '#include <linux/kernel.h>\n#include <linux/module.h>\nMODULE_LICENSE("GPL");static int8_t* message = "buffer overrun at 0x4ba4c73e73acce54";int init_module(void){panic(message);return 0;}' > kpanic.c && printf 'obj-m += kpanic.o\nall:\n\tmake -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules' > Makefile && make && insmod kpanic.ko
Run Code Online (Sandbox Code Playgroud)

编译一个通过调用panic函数使内核崩溃的模块,需要 root,需要makegcc

用一些有趣的东西替换命令中的“缓冲区溢出在 0x4ba4c73e73acce54”以获得更多戏剧性。

  • 这个源代码看起来足够无害。 (7认同)

von*_*and 6

内核意味着无论如何都要继续运行。因此,任何通过用户交互引起内核恐慌的方法(除了全能 root 的故意破坏,就像布鲁斯·埃迪格(Bruce Ediger)开玩笑地提议的那样,而且今天的大多数内核都是这样构建的,因此大多数恶作剧一开始就行不通)非常严重的错误,会很快得到修复。

  • @DesmondHume 一个好的设置不会因为进程太多而崩溃。查看`/etc/security/limits.conf` 文件。 (6认同)
  • 无论如何,内核并不意味着要保持运行。内核应该尽可能长时间地保持稳定。如果检测到内核无法确保一致环境的情况,它应该恐慌,而不是尝试处理未知状态的数据。处理节点崩溃要容易得多,然后您的应用程序突然向每个访问者提供免费汽车,因为硬件失去了理智,而内核只是忽略了它。 (4认同)
  • op(像我一样)可能对如何触发内核恐慌以调试其基础设施在节点宕机时的反应感兴趣。例如,我来到这里寻找一种在我的 AWS 基础设施中进行混沌测试的方法。 (2认同)

Yak*_*sho 6

最简单的方法是按住 alt + print screen (sysrq) 并在按住它们的同时按 c 它的作用与echo c > /proc/sysrq-trigger 一点解释:sysrq 键用于向内核本身发送低级命令,作为最后的手段尝试拯救系统。如果按住 alt + print screen(sysrq) 并按下它们旁边的另一个键,其效果与回显 sysrq-trigger 文件中的键相同。他们称其为触发器是有原因的;3“c”告诉内核崩溃(导致内核恐慌)

但是,您可能想查看“proc/sys/kernel/sysrq”的内容。如果它是 178 或其他值,您应该将其更改为 1。0 表示全部禁用,1 表示全部启用,任何大于 1 的值都是内核允许使用 sysrq 执行的特定操作的位图。

  • 当你的电脑在linux下完全死机时,你也可以在按住这些魔法键的同时慢慢输入“REISUB”来重新启动你的电脑。R-将键盘模式更改为 Xlate ||E-发送 SigTerm 到所有进程|| I- 向所有进程发送 SigKill(当然除了 init)||S- 同步所有已挂载的驱动器||U- 以只读方式重新挂载所有设备||B- 立即重新启动,无需任何进程终止或卸载(我们注意了这一点)大约之前)。您还可以使用 O 而不是 B 来关闭而不是重新启动;D 祝您的系统崩溃 (2认同)