mirror of
https://github.com/kakwa/uts-server
synced 2024-06-10 04:49:52 +02:00
65 lines
1.3 KiB
C
65 lines
1.3 KiB
C
|
/*
|
||
|
* daemonize.c
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <unistd.h>
|
||
|
#include <signal.h>
|
||
|
#include <sys/types.h>
|
||
|
#include <sys/stat.h>
|
||
|
#include <syslog.h>
|
||
|
|
||
|
static void skeleton_daemon()
|
||
|
{
|
||
|
pid_t pid;
|
||
|
|
||
|
/* Fork off the parent process */
|
||
|
pid = fork();
|
||
|
|
||
|
/* An error occurred */
|
||
|
if (pid < 0)
|
||
|
exit(EXIT_FAILURE);
|
||
|
|
||
|
/* Success: Let the parent terminate */
|
||
|
if (pid > 0)
|
||
|
exit(EXIT_SUCCESS);
|
||
|
|
||
|
/* On success: The child process becomes session leader */
|
||
|
if (setsid() < 0)
|
||
|
exit(EXIT_FAILURE);
|
||
|
|
||
|
/* Catch, ignore and handle signals */
|
||
|
//TODO: Implement a working signal handler */
|
||
|
signal(SIGCHLD, SIG_IGN);
|
||
|
signal(SIGHUP, SIG_IGN);
|
||
|
|
||
|
/* Fork off for the second time*/
|
||
|
pid = fork();
|
||
|
|
||
|
/* An error occurred */
|
||
|
if (pid < 0)
|
||
|
exit(EXIT_FAILURE);
|
||
|
|
||
|
/* Success: Let the parent terminate */
|
||
|
if (pid > 0)
|
||
|
exit(EXIT_SUCCESS);
|
||
|
|
||
|
/* Set new file permissions */
|
||
|
umask(0);
|
||
|
|
||
|
/* Change the working directory to the root directory */
|
||
|
/* or another appropriated directory */
|
||
|
chdir("/");
|
||
|
|
||
|
/* Close all open file descriptors */
|
||
|
int x;
|
||
|
for (x = sysconf(_SC_OPEN_MAX); x>0; x--)
|
||
|
{
|
||
|
close (x);
|
||
|
}
|
||
|
|
||
|
/* Open the log file */
|
||
|
openlog ("firstdaemon", LOG_PID, LOG_DAEMON);
|
||
|
}
|