bash - 如何阻止信号杀死我的 Bash 脚本?

标签 bash signals kill

我想要一个无限循环继续运行,并且只是暂时被终止信号中断。我尝试过 SIGINT、SIGUSR1、SIGUSR2。所有这些似乎都停止了循环。我什至尝试过 SIGINFO,但 Linux 不支持。

#!/bin/bash
echo $$ > /tmp/pid  # Save the pid

function do_something {
    echo "I am doing stuff" #let's do this now, and go back to doing the thing that is to be done over and over again.
#exit
}


while :
do
    echo "This should be done over and over again, but always wait for someething else to be done in between"

    trap do_something SIGINT
    while `true`
    do
            sleep 1 #so we're waiting for that other thing.
    done

done

我的代码在从另一个脚本获取 INT 信号后运行该函数一次,但之后就不再运行了。它停止了。

编辑:虽然我不小心将 en exit 放在函数末尾,但在 Stack Overflow 上,我在实际使用的代码中并没有这样做。不管怎样,都没有什么区别。解决方案是 Tiago 所描述的 SIGTERM。

最佳答案

我相信您正在寻找SIGTERM :

示例:

#! /bin/bash

trap -- '' SIGINT SIGTERM
while true; do
    date +%F_%T
    sleep 1
done

运行此示例 cTRL+C不会杀死它,也不会 kill <pid>不过你可以用 kill -9 <pid> 杀死它.

如果你不想CTRL+Z中断使用:trap -- '' SIGINT SIGTERM SIGTSTP

关于bash - 如何阻止信号杀死我的 Bash 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24848843/

相关文章:

bash - date命令可以宏化吗

c++ - 我应该使用什么信号来终止/终止 Windows 上的应用程序?

emacs - Emacs:无论随后的 killer 如何,如何拉动最后被拉动的文本?

linux - 如何在我的 shell 脚本中终止 'play' 进程?

bash - 如何将一个文件逐行放入另一个文件中

arrays - 数组语法错误中的最后一个元素?

bash 脚本 - 检查输出中的特定字符串失败

c - 调用 read 时超时的缺陷

c - 客户端异常终止如何通知服务器?

.net - 管理 .NET 应用程序以在终止/终止时正常关闭