【发布时间】:2013-12-11 07:46:59
【问题描述】:
(问题已修改,现在我对实际情况有了更多了解):
我有一个在后台运行的脚本,定期做一些工作,然后休眠 30 秒:
echo "background script PID: $$"
trap 'echo "Exiting..."' INT EXIT
while true; do
# check for stuff to do, do it
sleep 30
done &
如果我尝试通过kill 或kill INT 终止此脚本,则响应信号需要30 秒。
我会在下面回答这个问题,因为我在网上找到了一个很好的解释。
(我原来的、令人尴尬的未经研究的问题)
这个问题是针对包含以下陷阱的 bash 脚本:
trap 'echo "Exiting...">&2; kill $childPID 2>/dev/null; exit 0' \ SIGALRM SIGHUP SIGINT SIGKILL SIGPIPE SIGPROF SIGTERM \ SIGUSR1 SIGUSR2 SIGVTALRM SIGSTKFLT如果我在前台运行脚本,然后点击 CTRL-C,立即获取信号并退出 (不到一秒)。
如果我在后台运行相同的脚本 (
&),然后通过kill或kill -INT,需要30秒才能收到信号。为什么会这样,我该如何解决?
【问题讨论】:
-
你能展示一下脚本吗?
-
好的,我现在可以看到还涉及一些其他因素,因为我没有通过一个简单的示例得到相同的行为。我将花一些时间将其缩小到重现该行为的最小示例,并用更多细节更新我的问题。
标签: bash signals kill bash-trap