【问题标题】:What special precautions must I make for docker apps running as pid 1?对于以 pid 1 运行的 docker 应用程序,我必须采取哪些特殊预防措施?
【发布时间】:2014-11-11 01:53:01
【问题描述】:

据我所知,以 pid 1 运行的程序可能需要采取特殊的预防措施,例如捕获某些信号。

目前还不清楚如何正确编写 pid 1。在我的情况下,我宁愿不使用 runit 或 supervisor。例如,supervisor 是用 python 编写的,如果你安装它,它会产生一个更大的容器。我不是 runit 的粉丝。

查看 runit 的源代码很有趣,但像往常一样,cmets 几乎不存在,并且不解释出于什么原因正在做什么。

【问题讨论】:

    标签: linux docker init


    【解决方案1】:

    有一个很好的讨论here

    • 当 pid 为 1 的进程因任何原因死亡时,所有其他进程 被 KILL 信号杀死
    • 当任何具有子进程的进程因任何原因死亡时,其子进程将被重新设置为具有 PID 1 的进程
    • 许多具有 Term 默认操作的信号没有 PID 1 的信号。

    您问题的相关部分:

    如果进程没有安装信号处理程序,你不能通过发送 SIGTERM 或 SIGINT 来停止进程

    【讨论】:

    • 我认为你是对的。主要的是,通常你不需要捕捉 sigterm。但是对于 pid 1 进程,它需要一个 sigterm 处理程序。如果它产生任何其他进程,它也需要在一个任期内处理这些进程。
    • 找到了对传统 /sbin/init 脚本的详尽解释,其中包含 Ruby 中的示例,涵盖了 PID 1 应该能够执行的所有操作felipec.wordpress.com/2013/11/04/init
    猜你喜欢
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 2012-08-02
    • 2020-02-19
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多