#! /bin/sh /usr/share/dpatch/dpatch-run ## 82_killall_retval.dpatch by Petter Reinholdtsen Modify killall5 to make it report if it found any processes to kill. This make it possible to avoid sleeping for 5 seconds during shutdown if there are no processes left to wait for. @DPATCH@ Index: sysvinit/man/killall5.8 =================================================================== --- sysvinit/man/killall5.8 (revision 856) +++ sysvinit/man/killall5.8 (working copy) @@ -10,6 +10,10 @@ kernel threads and the processes in its own session, so it won't kill the shell that is running the script it was called from. Its primary (only) use is in the \fBrc\fP scripts found in the /etc/init.d directory. +.SH EXIT STATUS +The program return zero if it killed processes. It return 2 if no +process were killed, and 1 if it was unable to find any processes +(/proc/ is missing). .SH SEE ALSO .BR halt (8), .BR reboot (8) Index: sysvinit/src/killall5.c =================================================================== --- sysvinit/src/killall5.c (revision 856) +++ sysvinit/src/killall5.c (working copy) @@ -603,6 +603,9 @@ int pid, sid = -1; int sig = SIGKILL; + /* return non-zero if no process was killed */ + int retval = 2; + /* Get program name. */ if ((progname = strrchr(argv[0], '/')) == NULL) progname = argv[0]; @@ -643,15 +646,17 @@ /* Read /proc filesystem */ if (readproc(1) < 0) { kill(-1, SIGCONT); - exit(1); + return(1); } /* Now kill all processes except init (pid 1) and our session. */ sid = (int)getsid(0); pid = (int)getpid(); for (p = plist; p; p = p->next) - if (p->pid != 1 && p->pid != pid && p->sid != sid && !p->kernel) + if (p->pid != 1 && p->pid != pid && p->sid != sid && !p->kernel) { kill(p->pid, sig); + retval = 0; + } /* And let them continue. */ kill(-1, SIGCONT); @@ -662,5 +667,5 @@ /* Force the kernel to run the scheduler */ usleep(1); - return 0; + return retval; }