diff options
author | Roy Marples <roy@marples.name> | 2008-11-03 21:06:45 +0000 |
---|---|---|
committer | Roy Marples <roy@marples.name> | 2008-11-03 21:06:45 +0000 |
commit | 8a76c273253180a5872ce909ae63d79fafc1d8ca (patch) | |
tree | 265ff4f5a6568ac3847056e8bf8840f16d6b8933 /src/rc | |
parent | 7467440a294077af40b40dff49144ffc66cd614a (diff) |
Fix sending signals, #121.
Diffstat (limited to 'src/rc')
-rw-r--r-- | src/rc/start-stop-daemon.c | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/src/rc/start-stop-daemon.c b/src/rc/start-stop-daemon.c index b85a5f3d..a4750e0e 100644 --- a/src/rc/start-stop-daemon.c +++ b/src/rc/start-stop-daemon.c @@ -608,7 +608,8 @@ int start_stop_daemon(int argc, char **argv) #endif int opt; - bool start = true; + bool start = false; + bool stop = false; bool oknodo = false; bool test = false; bool quiet; @@ -617,7 +618,7 @@ int start_stop_daemon(int argc, char **argv) char *startas = NULL; char *name = NULL; char *pidfile = NULL; - int sig = SIGTERM; + int sig = 0; int nicelevel = 0; bool background = false; bool makepidfile = false; @@ -676,9 +677,8 @@ int start_stop_daemon(int argc, char **argv) (int *) 0)) != -1) switch (opt) { case 'K': /* --stop */ - start = false; + stop = true; break; - case 'N': /* --nice */ if (sscanf(optarg, "%d", &nicelevel) != 1) eerrorx("%s: invalid nice level `%s'", @@ -844,23 +844,35 @@ int start_stop_daemon(int argc, char **argv) else *--argv = exec; - if (start && !exec) - eerrorx("%s: nothing to start", applet); - - if (!start && !*argv && !pidfile && !name && !uid) - eerrorx("%s: --stop needs --exec, --pidfile, --name or --user", applet); - - if (makepidfile && !pidfile) - eerrorx("%s: --make-pidfile is only relevant with --pidfile", applet); - - if (background && !start) - eerrorx("%s: --background is only relevant with --start", applet); - - if ((redirect_stdout || redirect_stderr) && !background) - eerrorx("%s: --stdout and --stderr are only relevant with --background", - applet); + if (stop || sig) { + if ( !*argv && !pidfile && !name && !uid) + eerrorx("%s: --stop needs --exec, --pidfile," + " --name or --user", applet); + if (background) + eerrorx("%s: --background is only relevant with" + " --start", applet); + if (makepidfile) + eerrorx("%s: --make-pidfile is only relevant with" + " --start", applet); + if (redirect_stdout || redirect_stderr) + eerrorx("%s: --stdout and --stderr are only relevant" + " with --start", applet); + } else { + if (!exec) + eerrorx("%s: nothing to start", applet); + if (makepidfile && !pidfile) + eerrorx("%s: --make-pidfile is only relevant with" + " --pidfile", applet); + if ((redirect_stdout || redirect_stderr) && !background) + eerrorx("%s: --stdout and --stderr are only relevant" + " with --background", applet); + } - if (!start) { + if (stop || sig) { + if (!sig) + sig = SIGTERM; + if (!stop) + oknodo = true; if (!TAILQ_FIRST(&schedule)) { if (test || oknodo) parse_schedule("0", sig); |