I\'m trying to catch the SIGUSR1 signal in a bash script that is sleeping via the sleep command:
#!/bin/bash
trap \'echo \"Caught
#!/bin/bash
trap 'echo "Caught SIGUSR1"' SIGUSR1
echo "Sleeping. Pid=$$"
while :
do
sleep 10 &
wait $!
echo "Sleep over"
done
Remark that
sleep infinity &
wait
puts the sleep in background, and stops the wait with the signal. This leaves an infinite sleep behind on every signal !
Replace the sleep and wait with
read
and you will be fine.
Just a point about the wait after the sleep because I've just made this error in my script:
You should use
wait $!instead ofwaitif, inside your script, you already launched other processes in background
For example, the wait inside the next snippet of code will wait for the termination of both process_1 and sleep 10:
process_1 &
...
sleep 10 &
wait
If you use, instead of wait, wait $! your script will wait only for sleep 10, because $! means PID of last backgrounded process.