0
它看起来像在bash中,如何在不停止脚本的情况下捕获并处理SIGINT?
trap on_sigint SIGINT
只是尽快SIGINT
被捕获停止脚本。然后,执行on_sigint
。 是否可以在不停止脚本的情况下处理SIGINT
?
它看起来像在bash中,如何在不停止脚本的情况下捕获并处理SIGINT?
trap on_sigint SIGINT
只是尽快SIGINT
被捕获停止脚本。然后,执行on_sigint
。 是否可以在不停止脚本的情况下处理SIGINT
?
SIGINT
不会在处理程序运行后终止脚本。这里是一个小的,独立的测试案例:
trap on_sigint SIGINT
on_sigint() { echo "caught"; }
{ sleep 3; kill -SIGINT $$; } &
echo "Waiting for sigint"
sleep 5
echo "Still running"
输出是:
Waiting for sigint
caught
Still running
如果你的观察是正确的,最后一行就不会一直存在。
你说得对,这个问题似乎只在按^ C中断命令时才会发生。它看起来像首先中断脚本的运行命令,然后处理信号。 – loxaxs
你的'on_sigint'做了什么?你能显示你的代码吗?只有当您的SIGINT处理程序退出脚本时,该脚本才会停止。 – lurker
函数是:'on_SIGINT(){''收到echo'<< SIGINT >>'; stop = 1; echo'will stop。'}' – loxaxs
你知道脚本名称区分大小写吗?所以如果你的中断处理程序被命名为'on_SIGINT'并且你正在执行'trap on_sigint',那么你的陷阱将不会被执行。您应该将您的代码添加到问题描述中。还有脚本的其他部分是在看'stop'还是退出,如果它是'1'? – lurker