有没有办法暂时禁用 dmesg 中的段错误消息?

有没有办法暂时禁用 dmesg 中的段错误消息?

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=0echo 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]

不记录最后一个段错误。

相关内容