Linux 下故意出现内核恐慌?

Linux 下故意出现内核恐慌?

有什么方法可以在Linux下引起内核恐慌吗?我听说过

echo c > /proc/sysrq-trigger

但它似乎只是冻结了,我不确定这是内核恐慌。是否有任何我可以以 root 身份运行的 C 程序会导致内核崩溃?

答案1

使用杀戮

我想你可以尝试以下方法:

$ kill -6 1

这会将信号#6 发送到进程#1(init 进程)。如果您阅读信号手册页:“人7号信号”:

   Signal     Value     Action   Comment
   -------------------------------------------------------------------------
   SIGHUP        1       Term    Hangup detected on controlling terminal
                                 or death of controlling process
   SIGINT        2       Term    Interrupt from keyboard
   SIGQUIT       3       Core    Quit from keyboard
   SIGILL        4       Core    Illegal Instruction
   SIGABRT       6       Core    Abort signal from abort(3)

您可以了解进程如何处理各种信号 ( cat /proc/$PID/status)。请参阅此 U&L 问答了解更多信息:如何检查进程正在监听哪些信号?

内存溢出

另一种方法是溢出内存以引发内核恐慌。首先,您需要禁用交换。

$ swapon -s
Filename                Type        Size    Used    Priority
/dev/mapper/VolGroup00-LogVol01         partition   14352376    3177812 -1

$ swapoff /dev/mapper/VolGroup00-LogVol01

现在消耗所有内存:

$ for r in /dev/ram*; do cat /dev/zero > $r; done

参考

答案2

你可以试试sudo kill -SEGV 1。这将立即使 init 崩溃,就像存在 MM 故障一样(内核相当于段冲突)。

答案3

一些英特尔硬件有一个 NMI 按钮(不可屏蔽中断),如果您有NMI 看门狗启用。还有其他几种方法可以导致 NMI 看门狗恐慌

相关内容