当shell脚本终止时如何终止shell脚本运行的python进程?

当shell脚本终止时如何终止shell脚本运行的python进程?

我有一个运行 python 的 shell 脚本。

启动文件

# Setup environment
cd ~/foobar/ && \
    python3 -m venv env && \
    source env/bin/activate && \
    pip install -q -r requirements.txt && \
    find . -maxdepth 1 -type f -name "*.py" | xargs pylint

# Run scripts
python ~/foobar/main.py

如果我ctrl+c在终端中,它将正确关闭 python。但是,如果我pkill -9 start.sh,它会提示Killed,但 python 仍在运行。当调用脚本死亡时,有没有办法杀死Python脚本?

答案1

有趣的问题是:什么会杀死 Python 脚本?如果你用它消灭 bash 进程,SIGKILL那么它肯定不会对 Python 脚本做任何事情。

您可以启动一个后台进程,定期检查主 bash 进程是否仍然存在,并杀死 Python 脚本,以防它消失。

如果你可以修改Python脚本,它可以定期检查其父级是否已经消失(最简单:检查父级PID是否为1)并杀死自己。这样意外杀死检查器不会造成任何问题......

最好的解决方案可能在两个脚本之外。您可以将 bash 脚本作为(常规或临时的,请参阅man systemd-run)SystemD 服务运行,并用于systemctl终止该脚本(即终止整个 cgroup)。

相关内容