killall
A useful shortcut for killing all processes is killall. killall kills processes that match a supplied criteria. Much like pgrep and friends, killall is very flexible. First, a word of warning: You should never consider running killall without the -e (exact match) option, unless you really know what you are doing and exactly what processes could ever be running on the system. The other very common switch is -u, which allows you to specify the user ID to which to limit the search. If your apache process runs as the user www, then by specifying -u www you can be sure that no other users’ processes will be affected, as with the preceding pgrep example. killall -u www by itself will kill every process run by the www user — again, exactly the same as pgrep. You can specify different signals to pass with the -s switch — so killall -1 -u www sends a SIGHUP signal to the www processes, telling them to restart.
A simple application startup/shutdown script looks like this:
$ cat /etc/init.d/myapp
#!/bin/bash
case "$1" in
"start") su – myapp /path/to/program/startall
# This may spawn a load of processes, whose names and PIDs may not be known.
# However, unless suid is involved, they will be owned by the myapp user
;;
"stop") killall -u myapp
# This kills *everything* being run by the myapp user.
;;
*) echo "Usage: 'basename $0' start|stop"
;;
esac
$
Many services start a set of processes, whose names you, as a systems administrator, ...