diff options
-rw-r--r-- | server/src/daemon.cc | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/server/src/daemon.cc b/server/src/daemon.cc index 9de3807..aabaa2f 100644 --- a/server/src/daemon.cc +++ b/server/src/daemon.cc @@ -103,8 +103,19 @@ int Daemon::run(const char *user, const char* group, bool detach, umask(0); + if(pidfile != "" ) { + FILE *fp = fopen(pidfile.c_str(), "r"); + if(fp != NULL) { + fclose(fp); + fprintf(stderr, "Could not write pid file \"%s\"" + " - file already exists.\n", + pidfile.c_str()); + return -1; + } + } + if(detach) { - if( daemon(0, 0) == -1) { + if(daemon(0, 0) == -1) { perror(""); return -1; } @@ -112,10 +123,12 @@ int Daemon::run(const char *user, const char* group, bool detach, if(pidfile != "" ) { pid_t pid = getpid(); + FILE *fp = fopen(pidfile.c_str(), "w"); - if(errno) { + if(fp == NULL) { fprintf(stderr, "Could not write pid file \"%s\"", pidfile.c_str()); perror(""); + return -1; } else { fprintf(fp, "%lu", (unsigned long int)pid); fclose(fp); @@ -151,5 +164,11 @@ int Daemon::run(const char *user, const char* group, bool detach, // Don't disable Ctrl+c when running in foreground. //if(detach) signal (SIGINT, SIG_IGN); - return daemon_main(); + int ret = daemon_main(); + + if(pidfile != "") { + unlink(pidfile.c_str()); + } + + return ret; } |