[git commit] start-stop-daemon: fix --help: -K or -S is required
Denys Vlasenko
vda.linux at googlemail.com
Tue Nov 7 05:55:35 UTC 2023
commit: https://git.busybox.net/busybox/commit/?id=0c71497e654fb5e9a9272f81ddb5d994d2839df4
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master
function old new delta
.rodata 105381 105382 +1
packed_usage 34638 34602 -36
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/1 up/down: 1/-36) Total: -35 bytes
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
debianutils/start_stop_daemon.c | 46 ++++++++++++++++++++++++++++++++---------
1 file changed, 36 insertions(+), 10 deletions(-)
diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c
index 3e5dd9faa..16df67b3e 100644
--- a/debianutils/start_stop_daemon.c
+++ b/debianutils/start_stop_daemon.c
@@ -11,11 +11,12 @@
/*
This is how it is supposed to work:
-start-stop-daemon [OPTIONS] [--start|--stop] [[--] arguments...]
+start-stop-daemon [OPTIONS] [--start|--stop] [[--] ARGS...]
One (only) of these must be given:
-S,--start Start
-K,--stop Stop
+ -T,--status Check for the existence of a process, return exitcode (since version 1.16.1)
Search for matching processes.
If --stop is given, stop all matching processes (by sending a signal).
@@ -36,20 +37,41 @@ with /proc/$PID/exe or argv[0] (comm can't be matched, it never contains path)]
Unlike -n, we match against the full path:
"ntpd" != "./ntpd" != "/path/to/ntpd"
-p,--pidfile PID_FILE Look for processes with PID from this file
+ --ppid PPID Look for processes with parent pid (since version 1.17.7)
Options which are valid for --start only:
- -x,--exec EXECUTABLE Program to run (1st arg of execvp). Mandatory.
+ -x,--exec EXECUTABLE Program to run (1st arg of execvp).
+ If no -x, EXECUTABLE is taken from ARGS[0]
-a,--startas NAME argv[0] (defaults to EXECUTABLE)
-b,--background Put process into background
+ -O,--output FILE Redirect stdout and stderr to FILE when forcing the
+ daemon into the background (since version 1.20.6). Only
+ relevant when using --background.
+ Probably O_CREAT|O_TRUNC? What if execv fails - where does error msg go? "Old" stderr? FILE? Nowhere?
-N,--nicelevel N Add N to process' nice level
-c,--chuid USER[:[GRP]] Change to specified user [and group]
-m,--make-pidfile Write PID to the pidfile
(both -m and -p must be given!)
+ -P,--procsched policy:priority
+ This alters the process scheduler policy and priority of the
+ process before starting it (since version 1.15.0). The
+ priority can be optionally specified by appending a :
+ followed by the value. The default priority is 0. The
+ currently supported policy values are other, fifo and rr.
+ -r,--chroot root Change directory and chroot to root before starting the
+ process. Please note that the pidfile is also written after
+ the chroot.
+ -d,--chdir path Change directory to path before starting the process. This is
+ done after the chroot if the -r|--chroot option is set. When
+ not specified, start-stop-daemon will change directory to the
+ root directory before starting the process.
Options which are valid for --stop only:
-s,--signal SIG Signal to send (default:TERM)
-t,--test Exit with status 0 if process is found
(we don't actually start or stop daemons)
+ --remove-pidfile Used when stopping a program that does not remove its own pid
+ file (since version 1.17.19). Requires -p PIDFILE?
Misc options:
-o,--oknodo Exit with status 0 if nothing is done
@@ -84,11 +106,11 @@ Misc options:
//kbuild:lib-$(CONFIG_START_STOP_DAEMON) += start_stop_daemon.o
//usage:#define start_stop_daemon_trivial_usage
-//usage: "[OPTIONS] [-S|-K] ... [-- ARGS...]"
+//usage: "-S|-K [OPTIONS] [-- ARGS...]"
//usage:#define start_stop_daemon_full_usage "\n\n"
//usage: "Search for matching processes, and then\n"
-//usage: "-K: stop all matching processes\n"
//usage: "-S: start a process unless a matching process is found\n"
+//usage: "-K: stop all matching processes\n"
//usage: "\nProcess matching:"
//usage: "\n -u USERNAME|UID Match only this user's processes"
//usage: "\n -n NAME Match processes with NAME"
@@ -422,15 +444,19 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv)
opt = GETOPT32(argv, "^"
"KSbqtma:n:s:u:c:x:p:"
IF_FEATURE_START_STOP_DAEMON_FANCY("ovN:R:")
+ "\0"
+ "K:S:K--S:S--K"
/* -K or -S is required; they are mutually exclusive */
- /* -p is required if -m is given */
- /* -xpun (at least one) is required if -K is given */
+ ":m?p" /* -p is required if -m is given */
+ ":K?xpun" /* -xpun (at least one) is required if -K is given */
+ /* (the above does not seem to be enforced by Debian, it does nothing
+ * if no matching is specified with -K, and it ignores ARGS
+ * - does not take ARGS[0] as program name to kill)
+ */
// /* -xa (at least one) is required if -S is given */
//WRONG: "start-stop-daemon -S -- sleep 5" is a valid invocation
- /* -q turns off -v */
- "\0"
- "K:S:K--S:S--K:m?p:K?xpun"
- IF_FEATURE_START_STOP_DAEMON_FANCY("q-v"),
+ IF_FEATURE_START_STOP_DAEMON_FANCY(":q-v") /* -q turns off -v */
+ ,
LONGOPTS
&startas, &cmdname, &signame, &userspec, &chuid, &execname, &pidfile
IF_FEATURE_START_STOP_DAEMON_FANCY(,&opt_N)
More information about the busybox-cvs
mailing list