I am writing a bash wrapper for an application. This wrapper is responsible for changing the user, running the software and logging its output. I also want it to propagate the SIGINT signal.
Here is my code so far :
#!/bin/bash
set -e; set -u
function child_of {
ps --ppid $1 -o "pid" --no-headers | head -n1
}
function handle_int {
echo "Received SIGINT"
kill -int $(child_of $SU_PID)
}
su myuser -p -c "bash /opt/loop.sh 2>&1 | tee -i >(logger -t mytag)" &
SU_PID=$!
trap "handle_int" SIGINT
wait $SU_PID
echo "This is the end."
My problem is that when I send a SIGINT to this wrapper, handle_int
gets called but then the script is over, while I want it to continue to wait for $SU_PID
.
Is there a way to catch the int signal, do something and then prevent the script from terminating ?