howto kill x if x is running?
m.seaman at infracaninophile.co.uk
Sun Sep 15 06:56:31 UTC 2013
On 15/09/2013 07:20, Gary Kline wrote:
> I've evidently had too many pain meds; this shelll script should
> be easy. say that I have a utility xxx running sometimes. xxx is
> soaking up a chunk of my load. I have to use top to find if
> xxx is running, then kill -9 to kill xxx and have a steady load of,
> say, between 0.10 and 0.15. what's the script that can do this?
The classic answer to this is that you need to find the pid of your
'xxx' process, and then kill it using that. Some combination of ps(1)
and grep(1) usually sufficed.
However nowadays there's the very handy pkill(1):
pkill -9 xxx
Tying that in with the trigger based on system load:
load=$(sysctl vm.loadavg | cut -d ' ' -f 3)
too_high=$(bc -e "$load > 0.15" < /dev/null)
if [ $too_high = '1' ]; then
pkill -9 xxx
Note the use of bc(1) to compare floating point values -- the built-in
$((shell arithmetic)) or expr(1) only do integer arithmetic.
One final point -- instead of killing the xxx process when the load gets
too high, you could simply renice(1) it to very low priority. Or even
better, use idprio(1).
This won't actually affect the system load values much as 'system load'
is an average of the number of processes requesting a CPU time slice.
What it does do is mean that your 'xxx' process is always pretty much
the last process to get any CPU time -- so everything else should remain
responsive, and your xxx process will only run when the system is
Dr Matthew J Seaman MA, D.Phil.
JID: matthew at infracaninophile.co.uk
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 268 bytes
Desc: OpenPGP digital signature
More information about the freebsd-questions