【问题标题】:Stop execution of python script when parent Bash shell script is killed当父 Bash shell 脚本被杀死时停止执行 python 脚本
【发布时间】:2010-04-16 18:49:35
【问题描述】:

我正在开发一个运行多个 Python 脚本的 Bash shell 脚本,如下所示:

cd ${SCRIPT_PATH}
python -u ${SCRIPT_NAME} ${SCRIPT_ARGS} >> $JOBLOG 2>&1

在某一时刻,我终止了 shell 脚本(使用 kill PID),但 Python 脚本继续运行,即使在脚本终止后也是如此。我以为主脚本一死,这些就会死。我对 Bash 脚本有什么误解,我可以做些什么来获得我正在寻找的功能?提前致谢!

【问题讨论】:

    标签: python bash shell


    【解决方案1】:

    您需要安装一个信号处理程序来照顾您的子进程:

    trap "echo killing childs; pkill -P $$"  EXIT
    

    【讨论】:

    • 看起来可以,虽然我认为你需要捕获的不仅仅是 EXIT。
    • 在陷阱命令的末尾加上exit,所以脚本本身也会死掉。
    • 这甚至行不通......因为陷阱参数直到当前行终止后才会执行,而我要终止的是当前行。
    • 不,信号处理程序称为异步。不需要在陷阱命令的 and 处调用 exit,因为退出处理程序在 shell 的 ON TERMINATION 处被调用。
    【解决方案2】:

    当父进程死亡时应该向子进程发送 SIGHUP - 但是:

    a) 子进程可以忽略 SIGHUP,或者以非致命方式处理它。

    b) Child 可以通过 fork() 将自己与父进程解除关联并成为进程组负责人。

    您可以只exec python 代码,以便将 shell 替换为 python。

    【讨论】:

    • 我明白了,谢谢!我认为(a)是我的问题(可能是一个简单的“例外”条款)。
    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2018-09-25
    相关资源
    最近更新 更多