Linux 中的延迟内核恐慌

Delayed kernel panic in Linux

对于我们的测试,我们需要通过 SSH 在远程服务器 (VM) 上触发内核恐慌:

ssh server "echo c > /proc/sysrq-trigger"

问题是在大多数情况下 SSH 会话会卡住,因为内核恐慌发生在连接断开之前。有一个通用的连接超时,但这还不够好。

有什么办法可以延迟恐慌吗?

我们尝试将以下内容放入服务器上的文件中:

# - panic.sh -

#/bin/bash
sleep 5
echo c > /proc/sysrq-trigger

然后执行它:

ssh server "nohup panic.sh &"

但这并没有帮助。 SSH 会话一直等到睡眠结束。

发生这种情况是因为您的脚本保持所有管道打开,所以 ssh 必须等待,看看您是否会写更多。

如果您全部关闭它们,ssh 知道它将不再接收任何输出并将退出:

$ time ssh localhost 'sleep 5 < /dev/null > log 2>&1 &'
real    0m0.171s
user    0m0.013s
sys     0m0.003s

您也可以在睡眠前使用 exec 命令在脚本中执行此操作:

exec < /dev/null > log 2>&1