#include #include #include #include #include #include #include void daemonize(); int main(int argc, char **argv) { daemonize(); while(1) { sleep(5); daemonize(); } return 1; } void sig_handler(int signo) { return; } void daemonize() { struct sigaction term_sig; /* for SIGTERM, SIGINT, SIGHUP, SIGUSR1 and SIGUSR2 */ pid_t pid; /* fork new child */ if ( (pid = fork()) > 0 ) { exit(0); /* parent must die */ } else if ( pid < 0 ) fprintf(stderr, "fork failed\n"); setsid(); /* new session started */ chdir("/"); /* our root is / */ close(STDIN_FILENO); /* close stdin */ close(STDERR_FILENO); /* close stderr and stdout if close_fd is 1 */ close(STDOUT_FILENO); /* structs for signal handling */ memset(&term_sig, 0, sizeof(term_sig)); term_sig.sa_handler = &sig_handler; /* default signal handler function */ sigaction(SIGTERM, &term_sig, NULL); sigaction(SIGINT, &term_sig, NULL); sigaction(SIGHUP, &term_sig, NULL); sigaction(SIGUSR1, &term_sig, NULL); sigaction(SIGUSR2, &term_sig, NULL); return; }