主管的所有孩子都死后会发生啥?

Posted

技术标签:

【中文标题】主管的所有孩子都死后会发生啥?【英文标题】:What happens after all children of a supervisor die?主管的所有孩子都死后会发生什么? 【发布时间】:2019-05-26 18:47:04 【问题描述】:

假设主管的孩子由于某种原因不断失败。根据重新启动策略,它将重新启动失败的孩子,直到达到最大重新启动计数。 Supervisor 达到最大重启次数后会发生什么?

【问题讨论】:

【参考方案1】:

它将自行终止,其主管根据主管的策略决定是否重新启动它。如果它没有主管(它是根),则不会重新启动。这就是supervision trees 的意义所在。

【讨论】:

【参考方案2】:

正如 Alexey Romanov 已经回答的那样,主管也会失败,因此父主管本身正在执行自己的策略。监管者策略必须在父监管者和子监管者之间保持一致,否则如果与子监管者相比,其重启的 MaxTime 设置不正确,父监管者可能永远不会失败。如果没有监督员,应用程序本身就会崩溃。例如,如果应用程序作为 Windows 服务运行,则该服务本身可以设置重启策略。

例子:

child supervisor: max restarts 10, max time: 10secs -> child supervisor 如果在 10secs 内有超过 10 次崩溃,child supervisor 将会崩溃

父主管:最多重启次数:20,最长时间:5 秒 -> 子主管必须在 5 秒内崩溃 20 次。这也意味着子主管的孩子必须在 5 秒内崩溃 > 200 次才能使父主管崩溃

还请查看以下内容 https://learnyousomeerlang.com/supervisors

【讨论】:

以上是关于主管的所有孩子都死后会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

主管创建多个孩子时的问题

Erlang 主管有一个关键的孩子

如何在 Elixir 主管中引用之前启动的进程

如何在 Erlang/OTP 中将主管的孩子 pid 共享给另一个孩子

如何将孩子添加到 erlang 主管?

达到_max_restart_intensity 的主管如何只删除违规的孩子?