Linux Kernel.org 误导内核恐慌 /proc/sys/kernel/panic

red*_*0ct 5 linux kernel-panic proc sysctl linux-kernel

我一直/proc/sys/kernel/panic设置为0. 查看kernel.org中此选项的描述,我们可以看到:

恐慌:

此文件中的值表示内核在出现紧急情况时重新启动之前等待的秒数。使用软件看门狗时,推荐设置为60。

从这里可以得出结论,0重启前等待 0 秒 - 立即重启。
procMAN 页面声明如下:

/proc/sys/kernel/panic
该文件提供对内核变量 panic_timeout 的读/写访问。如果这是零,内核将在恐慌中循环;如果非零,则表示内核应该自动执行?在此秒数后启动。当您使用软件看门狗设备驱动程序时,建议设置为 60。

这里的0意思是对映的东西 - 永远不要重启。

那么为什么这样一个值得信赖的来源会提供如此误导性的信息呢?或者 MAN 页面可能不准确?

PS 只是从一panic_on_oops节中的提示(如果你碰巧读到这个)你可以猜到 MAN 页面是正确的。或者,如果您在技术上足够熟练,可以研究内核源代码中的某些内容。

Ste*_*itt 17

权威来源是内核中的实现,所以让我们先看看它。

panic条目sysctl 对应于一个内核变量叫panic_timeout。这是一个有符号整数,用于控制恐慌行为,如下所示:

  • 如果panic_timeout严格为正,内核会在恐慌后等待panic_timeout几秒钟;
  • 如果panic_timeout非零,内核会在恐慌后重新启动(等待后,如果合适的话);
  • 如果内核没有重新启动,它会打印一条消息并永远循环。

所以手册页是正确的,内核自己的文档不完整;但sysctl/kernel.rst现在文件panic更详细。这在内核的 5.7-rc1 版本中得到了修复