父子进程都需要进行信号处理,包括主进程!!!
父进程:
static void sig_fatal(int signo)
{if(is_running){
is_running = 0;
longjmp(exit_jb,signo);
}
}
void set_root_signal(void)
{
_signal(SIGINT , sig_fatal);
_signal(SIGQUIT , sig_fatal);
_signal(SIGILL , sig_fatal);
_signal(SIGTRAP , sig_fatal);
_signal(SIGIOT , sig_fatal);
_signal(SIGFPE , sig_fatal);
_signal(SIGTERM , sig_fatal);
_signal(SIGHUP , SIG_IGN);
_signal(SIGPIPE , SIG_IGN);
_signal(SIGUSR1 , SIG_IGN);
_signal(SIGUSR2 , SIG_IGN);
}
子进程
void set_child_signal(void)
{
_signal(SIGINT , SIG_IGN);
_signal(SIGQUIT , SIG_IGN);
_signal(SIGILL , SIG_DFL);
_signal(SIGTRAP , SIG_DFL);
_signal(SIGIOT , SIG_DFL);
_signal(SIGFPE , SIG_DFL);
_signal(SIGTERM , SIG_IGN);
_signal(SIGHUP , SIG_IGN);
_signal(SIGPIPE , SIG_IGN);
_signal(SIGUSR1 , SIG_IGN);
_signal(SIGUSR2 , SIG_IGN);
}