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 ofwait
if, 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.