我有一个运行 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)。