Background processes in shell scripts
I used it some time ago, but have already forgotten how I did it and had to reinvent the wheel. Here it goes.
You sometimes need to start a background process in shell, which can die right away, in which case you want to know about it. Situations in which it is useful include init.d scripts, running some background processes… Here are two useful shell functions:
function pidactive () {
#sends a signal which checks if the process is active (doesn't kill anything)
kill -0 $1 2> /dev/null
return
}
function pidkill () {
echo "killing pid"
kill $1 || return
#adjust depending how long it takes to die gracefully
sleep 1
if pidactive $1; then
#escalating
kill -9 $1
fi
}
What I do in the script is the following:
<command> &
PID=$!
#wait for the process to startup or die...
sleep 5
if ! pidactive $PID; then
wait $PID
die "Command failed with $?"
fi
...
#kill the process before exiting
pidkill $PID
September 18th, 2009 at 9:41 am
fix credit…
I recently came across your blog and have been reading along. I thought I would leave my first comment. I don\’t know what to say except that I have enjoyed reading. Nice blog. I will keep visiting this blog very often….