首页 文章

当子进程重复生成并杀死-9时,如何在bash脚本退出时杀死后台子进程

提问于
浏览
0

我的bash脚本被标记为重复启动一个程序并在执行约KILL_EVERY秒后将其关闭 . 问题是我用CTRL C停止脚本,它留下了它实例化的最后一个进程 .

我尝试为SIGINT设置一个陷阱并杀死进程$ ID,但是发生的事情是循环中断了 . 我怀疑这是因为在$ PROGRAM第一次被杀之后,陷阱会以某种方式激活,如果它存在,则会杀死下一个实例 .

如何解决这个问题,使脚本重复启动,等待KILL_EVERY秒,然后杀死$ PROGRAM但CTRL C不会让$ PROGRAM实例在后台运行?

KILL_EVERY=${1:-0}
PROGRAM=path/to/program
if [ $KILL_EVERY -gt 0]; then
    while true ; do
        ID=exec $PROGRAM &
        sleep $KILL_EVERY
        kill -9 $ID
    done
else
    exec $PROGRAM
fi

1 回答

  • -1

    你可以做:

    trap 'kill -HUP -$$; exit' SIGINT
    KILL_EVERY=${1:-0}
    PROGRAM=path/to/program
    if [ $KILL_EVERY -gt 0 ]; then
        while true ; do
            $PROGRAM & ID=$!
            sleep $KILL_EVERY
            kill -9 $ID
        done
    else
        exec $PROGRAM
    fi
    

    当你执行 ctrl+c 时,这将终止进程组中的所有内容 .

相关问题