sleeping=true trap "echo got signal" USR1 for try in 1 2 3 4 5; do kill -USR1 $$ sleep 1 echo sent $try signal done & sleep 10 & while $sleeping; do trap if wait %%; then echo sleep completed sleeping=false elif [ $? == 127 ]; then echo no sleep tonite sleeping=false else echo sleep interrupted; fi done