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