![当父进程被杀死时,如何杀死父进程运行的进程?](https://linux22.com/image/174493/%E5%BD%93%E7%88%B6%E8%BF%9B%E7%A8%8B%E8%A2%AB%E6%9D%80%E6%AD%BB%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E6%9D%80%E6%AD%BB%E7%88%B6%E8%BF%9B%E7%A8%8B%E8%BF%90%E8%A1%8C%E7%9A%84%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
我正在通过 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))