【发布时间】:2014-06-03 05:36:13
【问题描述】:
我有一个可能是不寻常的情况,一个启动 2 个顶级主管的应用程序,例如,
...
-behavior(application).
...
start(_StartType, _StartArgs) ->
sup1:start_link(),
sup2:start_link().
他们都有{one_for_one, 0, 1} 重启策略。他们的孩子实现了一个简单的 crash 函数,该函数会引发 bad_match 错误。
对于我的问题,如果我调用 sup1_child1:crash() 主管 sup1 将终止但应用程序将继续运行(即主管 sup2 及其子级仍然可用)。相反,如果我调用sup2_child1:crash(),则整个应用程序将终止。后一种行为是我在这两种情况下所期望的。如果我翻转 start_link() 调用的顺序,即
...
sup2:start_link(),
sup1:start_link().
然后崩溃 sup1 将导致应用程序终止,但崩溃 sup2 不会。所以看起来 start_link() 的调用顺序决定了哪个主管崩溃将导致应用程序终止。这是预期的吗?还是我通过拥有 2 个根监督者来滥用监督树功能?
谢谢,
丰富
【问题讨论】:
标签: erlang terminate erlang-supervisor