void SigHandler(int signo) { pid_t pLocalPid; switch(signo) { case SIGCHLD: pLocalPid=waitpid(-1,NULL,WNOHANG); while(pLocalPid>0) { pLocalPid=waitpid(-1,NULL,WNOHANG); } ::signal(SIGCHLD,SigHandler); ::signal(SIGTERM,SigHandler); ::signal(SIGINT,SigHandler); return; case SIGTERM: LogLine(RDConfig::LogInfo,"ripcd exiting normally"); RDDeletePid(RD_PID_DIR,"ripcd.pid"); exit(0); break; case SIGINT: LogLine(RDConfig::LogInfo,"ripcd exiting on SIGINT"); RDDeletePid(RD_PID_DIR,"ripcd.pid"); exit(0); break; } }
void SigHandler(int signum) { pid_t local_pid; switch(signum) { case SIGINT: case SIGTERM: RDDeletePid(RD_PID_DIR,"rdrepld.pid"); exit(0); break; case SIGCHLD: local_pid=waitpid(-1,NULL,WNOHANG); while(local_pid>0) { local_pid=waitpid(-1,NULL,WNOHANG); } signal(SIGCHLD,SigHandler); return; } }