我正在测试自动化系统,并且提出了行为异常的程序。对于第一个,我已经遇到了一些意外的行为。
trap "echo No thanks" INT
echo Let me just chill for $1 sec
sleep $1
echo All finished
观察到的行为:
wait
观察到相同的行为。预期的行为:
问题:
该问题本质上是this的重复,但该答案中没有令人满意的解释。
答案 0 :(得分:2)
当前:
bash
等待sleep
退出bash
和sleep
收到签名sleep
死了bash
完成等待并运行陷阱这会阻止您期望的行为,因为:
sleep
死bash
在运行陷阱之前等待命令完成要解决此问题,您可以让sleep
忽略sigint,并使bash
循环运行wait
,以便主脚本在ctrl-c之后获得控制权,但是仍然等待sleep
完成:
trap 'echo "No thanks"' INT
echo "Let me just chill for $1 sec"
# Run sleep in the background
sleep "$1" &
# Loop until we've successfully waited for all processes
until wait; do true; done
echo "All finished"