Browse Source

Made daemon into daemon

kaikas 7 years ago
parent
commit
42cf3e5c74
1 changed files with 65 additions and 0 deletions
  1. 65 0
      test/mycodaemon.c

+ 65 - 0
test/mycodaemon.c

@@ -2,16 +2,81 @@
  *  mycodaemon.c
  */
 
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <syslog.h>
+
 #include "../src/myco-daemon.c"
 
+static void daemonize()
+{
+    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);
+}
 
 int main() {
+    daemonize();
 
+    syslog(LOG_NOTICE, "mycodaemon started.");
 
     if (myco_daemon_start(getpid(), "192.168.0.35", "192.168.0.10") == -1) {
         return EXIT_FAILURE;
     }
 
+    syslog (LOG_NOTICE, "mycodaemon terminated.");
+    closelog();
+
     return EXIT_SUCCESS;
 
 }