signal()函数缺陷
mydaemon.c 没法执行后两行收尾操作
static void daemon_exit(int s)
{
if(s==SIGINT)
//多个信号共用一个信号处理函数
fclose(fp);
closelog();
}
signal(SIGNIT,daemon_exit);
signal(SIGQUIT,daemon_exit);
signal(siGTERM,daemon_exit);
一个空间被free多次,fclose,内存泄漏 嵌套; 方法:处理一个信号时把另外的信号屏蔽掉;使用sigaction
struct sigaction sa;
sa.sa_hadler=daemon_exit();
sigemptyset(&sa.sa_mask);
sigaddset(&sa.sa_mask,SIGQUIT)
sigcation(SIGINT,&sa,NULL);