Make killall and killall5 selecatable independent from kill
authorDenys Vlasenko <vda.linux@googlemail.com>
Wed, 23 Nov 2016 05:43:46 +0000 (06:43 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Wed, 23 Nov 2016 05:43:46 +0000 (06:43 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
procps/kill.c

index 1ee79a0515cc5251289dc7b8e1a0c3d40c7bde2b..57a33bcaa276f5685448e74041def8c408395232 100644 (file)
@@ -18,7 +18,6 @@
 //config:config KILLALL
 //config:      bool "killall"
 //config:      default y
-//config:      depends on KILL
 //config:      help
 //config:        killall sends a signal to all processes running any of the
 //config:        specified commands. If no signal name is specified, SIGTERM is
 //config:config KILLALL5
 //config:      bool "killall5"
 //config:      default y
-//config:      depends on KILL
-//config:
+//config:      help
+//config:        The SystemV killall command. killall5 sends a signal
+//config:        to all processes except kernel threads and the processes
+//config:        in its own session, so it won't kill the shell that is running
+//config:        the script it was called from.
 
 //applet:IF_KILL(APPLET(kill, BB_DIR_BIN, BB_SUID_DROP))
 //applet:IF_KILLALL(APPLET_ODDNAME(killall, kill, BB_DIR_USR_BIN, BB_SUID_DROP, killall))
@@ -95,17 +97,23 @@ int kill_main(int argc UNUSED_PARAM, char **argv)
        char *arg;
        pid_t pid;
        int signo = SIGTERM, errors = 0, quiet = 0;
-#if !ENABLE_KILLALL && !ENABLE_KILLALL5
-#define killall 0
-#define killall5 0
+#if ENABLE_KILL && !ENABLE_KILLALL && !ENABLE_KILLALL5
+# define killall  0
+# define killall5 0
+#elif !ENABLE_KILL && ENABLE_KILLALL && !ENABLE_KILLALL5
+# define killall  1
+# define killall5 0
+#elif !ENABLE_KILL && !ENABLE_KILLALL && ENABLE_KILLALL5
+# define killall  0
+# define killall5 1
 #else
 /* How to determine who we are? find 3rd char from the end:
  * kill, killall, killall5
  *  ^i       ^a        ^l  - it's unique
  * (checking from the start is complicated by /bin/kill... case) */
        const char char3 = argv[0][strlen(argv[0]) - 3];
-#define killall (ENABLE_KILLALL && char3 == 'a')
-#define killall5 (ENABLE_KILLALL5 && char3 == 'l')
+# define killall  (ENABLE_KILLALL && char3 == 'a')
+# define killall5 (ENABLE_KILLALL5 && char3 == 'l')
 #endif
 
        /* Parse any options */