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

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

我一直都/proc/sys/kernel/panic设定为0.查看此选项的描述内核.org我们可以看到:

恐慌:

该文件中的值表示内核在紧急情况下重新启动之前等待的秒数。当您使用软件看门狗时,建议设置为 60。

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

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

这里的0意思是相反的——永远不要重新启动。

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

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

答案1

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

panic中的条目sysctl 对应于一个名为panic_timeout。这是有符号整数, 曾经控制恐慌时的行为如下:

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

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

答案2

所以为什么这样的一个值得信赖的来源给出了这样的误导性信息?

首先,它只是有点误导——你宁愿跳到你的结论——而不是一个错误。我想说 kernel.org 忽略了特殊情况“0”。

我不知道详情内核.orgDocumentation/,但本质上它是官方内核(网络格式、分组)以及一些附加信息的混合。最好的例子是启动参数列表,正如他们所说,它是从不同的地方“收集”的。

“kernel.org”在“其他资源”下列出了“文档”链接。它带你去doc/html/latest/。下面还有一个混合的链接/doc

(sphinx 格式)文档一开始就说:

内核文档,就像内核本身一样,在很大程度上是一个工作正在进行中;当我们努力整合我们的许多方面时尤其如此 分散的文件成为一个连贯的整体。请注意,对文档的改进是欢迎;...

man 5 proc是项目(或包)的一部分man-pages,有一个拿着《打晕牛书》的人正在维护它。这些页面末尾都有“COLOPHON”作为副标题(部分)。它们也是异构的,有些只是收集的(所有 POSIX“1p”页面),有些是为了填补空白而编写的。

man7.org你可以直接看到 Kerrisk 先生的作品——我认为他做得很好,销售了他的书,但维护了一系列开源手册页。

我这个例子,他更准确。当然,两者似乎都是相关的(“当你...设备驱动程序... 60”)。


我们努力整合我们的将许多分散的文档整合为一个连贯的整体。

这只说得通了一半。谁的文件疏散,由谁负责?


我的伪代码是这样的:

if timeout > 0   then loop for 'timeout' seconds
if timeout != 0  then reboot
loop for ever

这意味着负值表示立即重新启动,正值表示两个 if 都为 true。零直接通向最终循环。

相关内容