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]
不记录最后一个段错误。