Linuxカーネルをダウンさせる厄介なバグを特定しようとしています。stderrにメッセージを出力していますが、stderrはログファイルにリダイレクトされます。ファイルアクセスのバッファリングを無効にする方法はありますか?カーネルがハングすると、バッファ内のメッセージが失われます。
3155 次
3 に答える
1
実際にstderr
は、デフォルトではバッファリングされていませんが、それは C ランタイムに関してのみだと思います。以前にこれを解決しました:
fflush (stderr); fsync (fileno (stderr));
(実際にはそうしましstdout
たが、同じルールが適用されます-実際fflush
は必要ないかもしれませんがstderr
、害はありません).
はfflush
C ランタイム バッファを OS にフラッシュし、fsync
強制的にディスクに書き込みます。
これはパフォーマンスに深刻な影響を与える可能性があることに注意してください。
于 2010-05-27T08:35:35.550 に答える
0
を使用して、バッファを強制的にフラッシュできますfflush(stderr);
于 2010-05-27T08:28:02.780 に答える
0
setvbuf
アプリの起動時に使用を試すことができます
setvbuf(stderr, NULL, _IONBF, 0);
ただし、stdio バッファーを読み取ることはできますが、「カーネル内」のバッファーの問題が残っており、fsync しない限り解消されません。ただし、ユーザー空間からカーネルのバグを追跡することは、最善の方法ではない可能性があります。
シリアル コンソールを使用して、別のマシンで出力を取得できますか? このようにして、oops と stderr メッセージの両方を取得できます
于 2010-05-27T12:59:43.397 に答える