X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=common%2Fcommon.c;h=3d2862fc23be66bb85ff92d1c7951008efa3ccb1;hb=f798d6403cab4926b31d8e5a4b72f406d6f46651;hp=3688c9d9e758422864c2fcd4f0387e5faf53dde9;hpb=8977d252fc44ae953df4bde4a2f1c5895beea4e0;p=apps%2Fpfixtools.git diff --git a/common/common.c b/common/common.c index 3688c9d..3d2862f 100644 --- a/common/common.c +++ b/common/common.c @@ -44,11 +44,15 @@ sig_atomic_t sigint = false; sig_atomic_t sighup = false; +bool daemon_process = true; +int log_level = LOG_INFO; + static FILE *pidfile = NULL; void common_sighandler(int sig) { switch (sig) { + case SIGTERM: case SIGINT: sigint = true; return; @@ -58,7 +62,7 @@ void common_sighandler(int sig) return; default: - syslog(LOG_ERR, "Killed (got signal %d)...", sig); + err("Killed (got signal %d)...", sig); exit(-1); } } @@ -193,10 +197,13 @@ int daemon_detach(void) open("/dev/null", O_RDWR); pid = fork(); - if (pid < 0) + if (pid < 0) { return -1; - if (pid) + } + if (pid) { + daemon_process = false; exit(0); + } setsid(); return 0; @@ -253,8 +260,10 @@ int pidfile_refresh(void) static void pidfile_close(void) { if (pidfile) { - rewind(pidfile); - ftruncate(fileno(pidfile), 0); + if (daemon_process) { + rewind(pidfile); + ftruncate(fileno(pidfile), 0); + } fclose(pidfile); pidfile = NULL; } @@ -264,17 +273,17 @@ int common_setup(const char* pidfilename, bool unsafe, const char* runas_user, const char* runas_group, bool daemonize) { if (pidfile_open(pidfilename) < 0) { - syslog(LOG_CRIT, "unable to write pidfile %s", pidfilename); + crit("unable to write pidfile %s", pidfilename); return EXIT_FAILURE; } if (!unsafe && drop_privileges(runas_user, runas_group) < 0) { - syslog(LOG_CRIT, "unable to drop privileges"); + crit("unable to drop privileges"); return EXIT_FAILURE; } if (daemonize && daemon_detach() < 0) { - syslog(LOG_CRIT, "unable to fork"); + crit("unable to fork"); return EXIT_FAILURE; } @@ -287,9 +296,10 @@ extern exitcall_t __madexit[]; static void common_shutdown(void) { - syslog(LOG_INFO, "Stopping..."); + if (daemon_process) { + info("stopping..."); + } pidfile_close(); - for (int i = -1; __madexit[i]; i--) { (*__madexit[i])(); }