diff -Naur busybox.orig/runit/runsvdir.c busybox/runit/runsvdir.c
--- busybox.orig/runit/runsvdir.c	2008-09-04 19:44:11 +0000
+++ busybox/runit/runsvdir.c	2008-09-11 19:40:38 +0000
@@ -89,13 +89,9 @@
 	warn3x(m1, "", "");
 }
 
-static void s_term(int sig_no UNUSED_PARAM)
+static void s_handler(int sig_no)
 {
-	exitsoon = 1;
-}
-static void s_hangup(int sig_no UNUSED_PARAM)
-{
-	exitsoon = 2;
+	exitsoon = sig_no;
 }
 
 static void runsv(int no, const char *name)
@@ -246,20 +242,11 @@
 
 	INIT_G();
 
-	argv++;
-	if (!*argv)
-		bb_show_usage();
-	if (argv[0][0] == '-') {
-		switch (argv[0][1]) {
-		case 'P': set_pgrp = 1;
-		case '-': ++argv;
-		}
-		if (!*argv)
-			bb_show_usage();
-	}
+	opt_complementary = "-1";
+	set_pgrp = getopt32(argv, "P");
+	argv += optind;
 
-	bb_signals_recursive(1 << SIGTERM, s_term);
-	bb_signals_recursive(1 << SIGHUP, s_hangup);
+	bb_signals_recursive(1 << SIGTERM | 1 << SIGHUP, s_handler);
 	svdir = *argv++;
 	if (argv && *argv) {
 		rplog = *argv;
@@ -347,13 +334,13 @@
 		}
 
 		switch (exitsoon) {
-		case 1:
-			_exit(EXIT_SUCCESS);
-		case 2:
+		case SIGHUP:
 			for (i = 0; i < svnum; i++)
 				if (sv[i].pid)
 					kill(sv[i].pid, SIGTERM);
-			_exit(111);
+			// N.B. fall through
+		case SIGTERM:
+			_exit(SIGHUP == exitsoon ? 111 : EXIT_SUCCESS);
 		}
 	}
 	/* not reached */
