From 608320637e8ccdc04ecaa00242bf52454123f28a Mon Sep 17 00:00:00 2001 From: Marko Kreen Date: Tue, 31 Aug 2010 11:55:08 +0300 Subject: [PATCH] pgqd: switches to signal running process --- sql/ticker/pgqd.c | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/sql/ticker/pgqd.c b/sql/ticker/pgqd.c index 562c2ee8..849f14ba 100644 --- a/sql/ticker/pgqd.c +++ b/sql/ticker/pgqd.c @@ -21,6 +21,11 @@ static const char usage_str[] = " -h Show help\n" " -V Show version\n" " --ini Show sample config file\n" +" -s Stop - send SIGINT to running process\n" +" -k Kill - send SIGTERM to running process\n" +#ifdef SIGHUP +" -r Reload - send SIGHUP to running process\n" +#endif ""; static const char *sample_ini = @@ -289,6 +294,8 @@ int main(int argc, char *argv[]) { int c; bool daemon = false; + int sig = 0; + const char *signame = NULL; for (c = 1; c < argc; c++) { if (!strcmp(argv[c], "--ini")) { @@ -301,7 +308,7 @@ int main(int argc, char *argv[]) } } - while ((c = getopt(argc, argv, "dqvhV")) != -1) { + while ((c = getopt(argc, argv, "dqvhVrsk")) != -1) { switch (c) { case 'd': daemon = true; @@ -315,6 +322,20 @@ int main(int argc, char *argv[]) case 'h': printf(usage_str); return 0; +#ifdef SIGHUP + case 'r': + sig = SIGHUP; + signame = "SIGHUP"; + break; +#endif + case 's': + sig = SIGINT; + signame = "SIGINT"; + break; + case 'k': + sig = SIGTERM; + signame = "SIGTERM"; + break; default: printf("bad switch: "); printf(usage_str); @@ -322,7 +343,7 @@ int main(int argc, char *argv[]) } } if (optind + 1 != argc) { - printf("pgqd requires config file\n"); + fprintf(stderr, "pgqd requires config file\n"); return 1; } @@ -330,6 +351,20 @@ int main(int argc, char *argv[]) load_config(false); + if (sig) { + if (!cf.pidfile || !cf.pidfile[0]) { + fprintf(stderr, "No pidfile configured\n"); + return 1; + } + if (signal_pidfile(cf.pidfile, sig)) + fprintf(stderr, "%s sent\n", signame); + else + fprintf(stderr, "Old process is not running\n"); + return 0; + } + + log_info("Starting pgqd " PACKAGE_VERSION); + daemonize(cf.pidfile, daemon); if (!event_init()) -- 2.39.5