Linux Kernel.orgはカーネルパニック/proc/sys/kernel/panicについて誤解を招く。

Linux Kernel.orgはカーネルパニック/proc/sys/kernel/panicについて誤解を招く。

私はいつも/proc/sys/kernel/panicに設定されています0。このオプションの説明を参照してください。kernel.org私達はそれを見ることができます:

パニック:

このファイルの値は、緊急時に再起動する前にカーネルが待機する秒数を示します。ソフトウェア監視機能を使用している場合は、60に設定することをお勧めします。

0これから再開する前にゼロ秒を待つと、すぐに再開されるという結論を下すことができます。
しかし、procMANページの説明は次のとおりです。

/proc/sys/kernel/panic
このファイルは、カーネル変数 Panic_timeout への読み取り/書き込みアクセスを提供します。この値が 0 の場合、カーネルはパニック状態で繰り返されます。 0以外の場合、この時間(秒)後にカーネルを自動的に再起動する必要があることを示します。ソフトウェア監視デバイスドライバを使用している場合は、60に設定することをお勧めします。

ここでのアイデア0はその逆です。再起動しないでください。

それでは、なぜそのような信頼できる情報源が誤解を招くような情報を提供するのでしょうか。それともMANページが正しくないのでしょうか?

PS 1つのセクションのヒントだけを見ると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」を無視すると言いたいと思います。

詳細はわかりませんkernel.orgDocumentation/しかし、本質的に公式カーネル(ネットワーク形式、パケット)といくつかの追加情報が混在しています。最良の例は起動パラメータのリストであり、いわゆる言うように複数の場所で「収集」されます。

「kernel.org」には、「追加リソース」の下に「ドキュメント」リンクがリストされています。それはあなたをそこに連れて行きますdoc/html/latest/。以下のミックスへのリンクもあります/doc

(スフィンクス形式)文書の先頭には次のように記載されています。

カーネル自体と同様に、カーネル文書も一般的に次のようになります。進行中のタスク; これは、私たちが私たちのさまざまな側面を統合しようとすると特にそうです。 散在ファイル一貫した全体になります。文書の改善は次のとおりです。歓迎;...

これは、Stunning Cow Bookを持っている人が維持しているman 5 procプロジェクト(またはパッケージ)の一部です。man-pagesこのページはすべて最後に字幕(セクション)として「COLOPHON」があります。また、不均一で一部は収集され(すべてのPOSIX "1p"ページ)、一部は空白を埋めるために作成されました。

存在するman7.orgKerriskさんの作品を直接見ることができます。私の考えでは、彼は自分の本をよく売りながら、一連のオープンソースのマニュアルページを管理することをうまくやっているようです。

私の例では、彼はより正確です。もちろん両方とも関連があるようです(「いつ…デバイスドライバ…60」)。


私たち統合に努める私たちの散在する多くの文書を一貫した全体に統合します。

これは半分しか理解できません。誰のファイルはじめに、責任は誰にありますか。


私の擬似コードは次のとおりです。

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

これは、負の値は直ちに再起動を意味し、正の値は両方の if が true であることを意味します。 0 は最終サイクルに直接接続されます。

関連情報