dmesgでsegfaultメッセージを一時的に無効にする方法はありますか?

dmesgでsegfaultメッセージを一時的に無効にする方法はありますか?

Linuxカーネルはリングバッファにセグメントを記録し続けます。

a.out[25415]: segfault at 8049604 ip 08049604 sp bf88e3fc error 15 in a.out[8049000+1000]

一時的に無効にする方法はありますか?私のユースケースは、あらゆる種類のクレイジーなタスクを実行するテストスイートを実行しており、dmesgその期間にセグフォルトを見たくないということです。dmesg -c私が使用する必要があるテストフレームワークは、dmesg出力を解析して途中で消去できないため、オプションではありません。

カーネルパラメータがある場合は出力を見ていますが、sysctl -a役に立つことはありません。kernel.print-fatal-signals有望に見えますが、より詳細な情報を表示するためのものです。

ベストアンサー1

さて、いよいよ見つけました。それは知られていますdebug.exception-trace

sysctl -w debug.exception-trace=0またはecho 0 > /proc/sys/debug/exception-traceオフにしてください。

# dmesg -c
# dmesg
# echo 'main;' | gcc -xc - && ./a.out
<stdin>:1:1: warning: data definition has no type or storage class
Segmentation fault
# dmesg
[  539.421736] a.out[1875]: segfault at 600874 ip 0000000000600874 sp 00007ffed85e7018 error 15 in a.out[600000+1000]
# sysctl debug.exception-trace
debug.exception-trace = 1 
# ./a.out 
Segmentation fault
# dmesg
[  539.421736] a.out[1875]: segfault at 600874 ip 0000000000600874 sp 00007ffed85e7018 error 15 in a.out[600000+1000]
[  584.492171] a.out[1878]: segfault at 600874 ip 0000000000600874 sp 00007ffc6b0d2358 error 15 in a.out[600000+1000]
# sysctl -w debug.exception-trace=0
debug.exception-trace = 0 
# ./a.out 
Segmentation fault
# dmesg
[  539.421736] a.out[1875]: segfault at 600874 ip 0000000000600874 sp 00007ffed85e7018 error 15 in a.out[600000+1000]
[  584.492171] a.out[1878]: segfault at 600874 ip 0000000000600874 sp 00007ffc6b0d2358 error 15 in a.out[600000+1000]

最後のセグフォルトは記録されません。

おすすめ記事