Зависит от того, как вы регистрируете обработчик сигнала.
С sigaction
и без флага SA_RESETHAND
сброса на SIG_DFL
не будет (хотя возврат из обработчика сигнала в ответ на SIGSEGV
, доставленный из-за ошибки сегментации, технически является UB).
С SA_RESETHAND
он будет сброшен, и если вы зарегистрируете обработчик с помощью signal
, то будет ли указываться обработчик сброса или нет, поэтому не используйте signal()
.
Пример:
#include <signal.h>
#include <unistd.h>
int volatile*a;
void h(int Sig) { write(1,"h\n", 2); }
int main()
{
//sigaction(SIGSEGV,&(struct sigaction){.sa_handler=h}, 0); //won't reset the handler, will likely loop
sigaction(SIGSEGV,&(struct sigaction){.sa_handler=h,.sa_flags=SA_RESETHAND}, 0); //will reset the handler
//signal(SIGSEGV,h); //may or may not reset the handler
*a=1;
return 0;
}