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]

마지막 세그폴트는 기록되지 않습니다.

관련 정보