Я пытаюсь поймать сигнал SIGUSR1 в bash script, который спят через команду sleep:
#!/bin/bash
trap 'echo "Caught SIGUSR1"' SIGUSR1
echo "Sleeping. Pid=$$"
while :
do
sleep 10
echo "Sleep over"
done
Ловушка сигнала работает, но эхо-сообщение не отображается, пока не закончится sleep 10.
По-видимому, обработка сигнала bash ожидает завершения текущей команды до обработки сигнала.
Есть ли способ прервать запущенную команду sleep, как только она получит сигнал, так же, как программа C прервет функцию libc sleep()?