【发布时间】:2011-08-07 16:56:02
【问题描述】:
在我见过的所有 Erlang 主管示例中,通常有一个“主”主管负责监督整个树(或者至少是主管树中的根节点)。如果“主人”主管坏了怎么办? “主人”——主管应该如何监管??有什么典型的模式吗?
【问题讨论】:
标签: erlang erlang-supervisor erl
在我见过的所有 Erlang 主管示例中,通常有一个“主”主管负责监督整个树(或者至少是主管树中的根节点)。如果“主人”主管坏了怎么办? “主人”——主管应该如何监管??有什么典型的模式吗?
【问题讨论】:
标签: erlang erlang-supervisor erl
顶级主管在您的应用程序 start/2 回调中使用 start_link 启动,这意味着它与应用程序进程链接。如果应用程序进程从死亡的最高主管收到退出信号,它会执行以下两种操作之一:
如果应用程序作为永久应用程序启动,我将终止整个节点(并且可能使用 HEART 重新启动)。
如果应用程序是临时启动的,应用程序将停止运行,不会进行重新启动尝试。
【讨论】:
通常,Supervisor 设置为“仅”监督其他进程。哪个男人没有由主管执行的用户编写的代码 - 所以它不太可能崩溃。
当然,这不能强制执行...所以典型的模式是不在 Supervisor 中具有任何特定于应用程序的逻辑...它应该只负责监督 - 并且什么都不做。
【讨论】:
好问题。我必须同意所有示例和教程大多忽略了这个问题——即使偶尔有人提到这个问题(没有提供示例解决方案):
如果您想要可靠性,请至少使用两台计算机,然后让它们相互监督。然而,如何使用 OTP 实际实现它是(在文档和教程的当前状态下),似乎介于隐藏和秘密之间。
【讨论】: