--- /dev/null
+#include "../include/fmsdaemon.h"\r
+\r
+#include <cstdio>\r
+#include <cstdlib>\r
+#include <sys/types.h>\r
+#ifndef _WIN32\r
+ #include <unistd.h>\r
+ #include <sys/stat.h>\r
+#endif\r
+\r
+#ifdef XMEM\r
+ #include <xmem.h>\r
+#endif\r
+\r
+/*\r
+ modified from http://www-theorie.physik.unizh.ch/~dpotter/howto/daemonize\r
+*/\r
+void Daemonize()\r
+{\r
+#ifndef _WIN32\r
+ pid_t pid, sid;\r
+\r
+ /* already a daemon */\r
+ if ( getppid() == 1 ) return;\r
+\r
+ /* Fork off the parent process */\r
+ pid = fork();\r
+ if (pid < 0) {\r
+ exit(EXIT_FAILURE);\r
+ }\r
+ /* If we got a good PID, then we can exit the parent process. */\r
+ if (pid > 0) {\r
+ exit(EXIT_SUCCESS);\r
+ }\r
+\r
+ /* At this point we are executing as the child process */\r
+\r
+ /* Change the file mode mask */\r
+ umask(0);\r
+\r
+ /* Create a new SID for the child process */\r
+ sid = setsid();\r
+ if (sid < 0) {\r
+ exit(EXIT_FAILURE);\r
+ }\r
+\r
+ /* Redirect standard files to /dev/null */\r
+ freopen( "/dev/null", "r", stdin);\r
+ freopen( "/dev/null", "w", stdout);\r
+ freopen( "/dev/null", "w", stderr);\r
+#endif\r
+}\r