无法使用SIGKILL杀死docker容器中的pid 1

Poo*_*oya 7 python signals docker

有一个原因,我想杀死docker容器中的主要python进程(PID 1).但非终止信号,比如SIGTERM,SIGKILL工作.我的意思是,跑步kill -SIGKILL 1没有效果.如何从容器内部杀死pid 1 ?我不想运行docker stop或类似的解决方案.

elj*_*efe 1

根据 Docker 问题跟踪器以及 pid 1s 状态的一般文档,您需要专门向信号添加一个处理程序并从中终止进程。

signal.signal(signal.SIGINT, exit_gracefully)
signal.signal(signal.SIGTERM, exit_gracefully)
Run Code Online (Sandbox Code Playgroud)

exit_gracefully需要定义并最终调用sys.exit(0)

这种行为是内核所希望和强制执行的,因为它不会sigaction在其他 pid 上调用默认值,即终止。

我们需要在 Node.js 中做类似的事情。