bash - 当我的命令被超时终止时,如何使 "Terminated"消息静音?

标签 bash shell

通过引用bash: silently kill background function processTimeout a command in bash without unnecessary delay ,我编写了自己的脚本来为命令设置超时,并使 kill 消息静音。

但是当我的进程被终止时,我仍然收到“已终止”消息。我的代码有什么问题?

#!/bin/bash
silent_kill() {
    kill $1 2>/dev/null
    wait $1 2>/dev/null
}
timeout() {
    limit=$1 #timeout limit
    shift
    command=$* #command to run
    interval=1 #default interval between checks if the process is still alive
    delay=1 #default delay between SIGTERM and SIGKILL
    (
        ((t = limit))
        while ((t > 0)); do
            sleep $interval;
            #kill -0 $$ || exit 0
            ((t -= interval))
        done
        silent_kill $$
        #kill -s SIGTERM $$ && kill -0 $$ || exit 0 
        sleep $delay
        #kill -s SIGKILL $$
    ) &> /dev/null &
    exec $*
}
timeout 1 sleep 10

最佳答案

您的代码没有任何问题,“已终止”消息不是来自您的脚本,而是来自调用 shell(您启动脚本的那个) 来自)。

您可以通过禁用作业控制来停用:

$ set +m
$ bash <your timeout script>

关于bash - 当我的命令被超时终止时,如何使 "Terminated"消息静音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32551713/

相关文章:

shell - Nginx - 密码保护目录

linux - 如何通过比较文件名和文件夹名将文件复制到同名文件夹?

linux - 在 Kubuntu 设备上执行命令

linux - Sed/AWK 在每个匹配的模式后搜索/替换字符串

linux - Bash 到批量转换

python-3.x - 如何在文件Linux中的两个字符串之间获取数据

linux - Bash grep 命令查找同一个文件 5 次

c - 以二进制形式打印文件(1 和 0)

linux - 为什么 env -i 与命令手册不匹配

shell - 执行shell时Jenkins管道 "java.io.NotSerializableException: hudson.model.User"