Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在kill命令处理时立即跳过循环并进入陷阱?[猛击]_Bash - Fatal编程技术网

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,这是真的。我补充了一个解释。谢谢