我正试图通过 sleep
命令在正在睡眠的bash脚本中捕获 SIGUSR1
信号:
#!/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()
函数一样?
3 回答
关于
sleep
之后的wait
只是一点,因为我刚刚在我的脚本中犯了这个错误:例如,下一段代码中的
wait
将等待process_1
和sleep 10
的终止:如果使用而不是
wait
,wait $!
,则脚本将仅等待sleep 10
,因为$!
表示最后一个后台进程的PID .备注
将睡眠置于后台,并停止等待信号 . 这会在每个信号上留下无限的睡眠!
更换睡眠并等待
你会没事的