当父进程被杀死时,如何杀死父进程运行的进程?

当父进程被杀死时,如何杀死父进程运行的进程?

我正在通过 python 脚本运行多个 docker 容器。当优雅地(cltr + c)关闭python脚本时,我已经处理杀死所有dockers,但是当它被强制杀死时,docker仍然运行。

问题是,如果 python 脚本被不正常地杀死,有没有办法杀死 docker 容器? (也许将python脚本设置为docker进程的父进程?有这样的事情吗?)

答案1

任何遇到同样问题的人,这可能会有所帮助。

libc = ctypes.CDLL("libc.so.6")
def set_pdeathsig(sig=signal.SIGTERM):
    def callback():
        return libc.prctl(1, sig)
    return callback

open_container_cmd = "docker-compose run --rm test" # cannot use detach <-d>
proc = subprocess.Popen(
                open_container_cmd,
                shell=True,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                stdin=subprocess.PIPE,
                preexec_fn=set_pdeathsig(signal.SIGTERM))

相关内容