Bash 如何在kill命令处理时立即跳过循环并进入陷阱?[猛击]
我的剧本:Bash 如何在kill命令处理时立即跳过循环并进入陷阱?[猛击],bash,Bash,我的剧本: #!/bin/bash finish() { echo "[$(date -u)] I was terminated." exit } trap finish SIGINT SIGTERM echo "pid is $$" while true do echo 'I am running' sleep 15 done 当我向运行脚本的进程发送命令kill-SIGTERM时,我必须等待执行sleep 15。我在谷歌上搜索了一下,但没有找到任何答
#!/bin/bash
finish() {
echo "[$(date -u)] I was terminated."
exit
}
trap finish SIGINT SIGTERM
echo "pid is $$"
while true
do
echo 'I am running'
sleep 15
done
当我向运行脚本的进程发送命令
kill-SIGTERM
时,我必须等待执行sleep 15
。我在谷歌上搜索了一下,但没有找到任何答案。当我发送kill
命令时,如何立即跳出循环并执行trap
。这个问题在这里或多或少得到了回答:。简而言之,执行脚本的bash
shell获得kill信号,但是sleep
调用没有
如果希望某个进程休眠,可以在后台执行休眠
,同时对其执行等待
。这样,父进程将获得您的信号并可以自由地处理它。在代码中:
#!/bin/bash
finish() {
echo "[$(date -u)] I was terminated."
exit
}
trap finish SIGINT SIGTERM
echo "pid is $$"
while true
do
echo 'I am running'
sleep 15 &
wait
done
请记住,您的终止信号将被父进程捕获,该进程将立即终止,但sleep 15
仍将在后台运行,直到完成。您可以通过添加kill$来终止此睡眠进程
终止由bash
执行的最后一个后台进程
最后一句话<代码>等待可以等待一个或多个进程完成。如果没有参数,它将等待所有子进程完成。如果指定了进程,它还将返回最后一个已完成进程的状态。如果不是(如示例中所示),它将返回0。这个问题在这里或多或少得到了回答:。简而言之,执行脚本的
bash
shell获得kill信号,但是sleep
调用没有
如果希望某个进程休眠,可以在后台执行休眠
,同时对其执行等待
。这样,父进程将获得您的信号并可以自由地处理它。在代码中:
#!/bin/bash
finish() {
echo "[$(date -u)] I was terminated."
exit
}
trap finish SIGINT SIGTERM
echo "pid is $$"
while true
do
echo 'I am running'
sleep 15 &
wait
done
请记住,您的终止信号将被父进程捕获,该进程将立即终止,但sleep 15
仍将在后台运行,直到完成。您可以通过添加kill$来终止此睡眠进程
终止由bash
执行的最后一个后台进程
最后一句话<代码>等待可以等待一个或多个进程完成。如果没有参数,它将等待所有子进程完成。如果指定了进程,它还将返回最后一个已完成进程的状态。如果不是(如示例中所示),它将返回0。put
kill$代码>退出之前,它也将终止sleep命令。@Ipor Sircer,这是真的。我补充了一个解释。谢谢。放kill$代码>退出之前,它也将终止sleep命令。@Ipor Sircer,这是真的。我补充了一个解释。谢谢