On Sat, Sep 13, 2003 at 03:09:26PM -0500, Jan Depner wrote:
killall -9 autorun 2>/dev/null
killall -9 artsd 2>/dev/null
killall -9 jackd 2>/dev/null [and so forth ...]
This sequence can be simplified and made a little more safe.
a) use "--quiet" instead of "2>/dev/null", so that any failure to
run
killall is not hidden, yet it won't complain if there are no
processes with that name,
b) use "--signal KILL" instead of "-9", to ease later understanding,
c) use "--wait" as well, so that potential timing issues are excluded
(if you did the sequence of killall's at higher priority than the
processes you have killed, then it is theoretically possible for you
to start new processes before the processes you killed have actually
died, and these new processes may therefore not run as expected ...
the technical term is "race condition".)
d) test for and use just the default SIGTERM signal, as there are some
programs that need to undo some of the work they have done, and a
SIGKILL (the -9) allows them no chance to do so. (An example are
programs that create permanent shared memory segments or other IPC
arcania; and then only delete them properly if not SIGKILLed.)
A rule of thumb is to prove to yourself that SIGTERM doesn't work
before adopting SIGKILL.
e) place the commands in a file in /usr/local/bin or $HOME/bin, include
that directory in your PATH, make sure the file is executable
"chmod +x killit", and add a "set -v", so that when you run it you
can
immediately see it's progress. If you've never written a file
containing commands to execute, have a go, you'll love the idea.
#!/bin/sh
set -v
killall --quiet --wait --signal KILL autorun
killall --quiet --wait --signal KILL artsd
killall --quiet --wait --signal KILL jackd
rm -rf /tmp/jack*
killall --quiet --wait --signal KILL /usr/lib/ardour/ardourx
killall --quiet --wait --signal KILL oafd
killall --quiet --wait --signal KILL xbiff
killall --quiet --wait --signal KILL envy24control
killall --quiet --wait --signal KILL /usr/bin/aplay
f) and to really go all the way, do some "factoring" to make it easier
to add new programs ... although this is no use if programs need
different signals:
#!/bin/sh
set -x
for PROCESS in autorun artsd jackd /usr/lib/ardour/ardourx oafd \
xbiff envy24control /usr/bin/aplay; do
killall --quiet --wait --signal KILL $PROCESS
done
rm -rf /tmp/jack*
References:
man 7 signal
man 1 killall
man 1 bash
tested on Debian GNU/Linux and Red Hat 9
--
James Cameron mailto:quozl@us.netrek.org
http://quozl.netrek.org/