Existe uma maneira de desabilitar temporariamente as mensagens de segfault no dmesg?

3

O kernel do Linux continua registrando os segfaults no buffer de anel.

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

Existe uma maneira de desativá-lo temporariamente? Meu caso é que estou executando um teste que faz todos os tipos de coisas malucas e não quero ver segfaults em dmesg desse período de tempo. dmesg -c não é uma opção porque a estrutura de teste que sou forçada a usar está analisando a saída do dmesg e não posso simplesmente limpá-la no meio.

Eu estava passando por sysctl -a output se houver algum parâmetro do kernel, mas não vejo nada que pareça ser útil. kernel.print-fatal-signals parecia promissor, mas é apenas para mostrar informações mais detalhadas.

    
por Miroslav Franc 18.11.2015 / 12:55

1 resposta

6

Ok, acabei encontrando. É chamado debug.exception-trace .

sysctl -w debug.exception-trace=0 ou echo 0 > /proc/sys/debug/exception-trace desativará.

# 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]

O último segfault não está registrado.

    
por 18.11.2015 / 16:12