有什么方法可以在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 看门狗恐慌