我有一个可能是不寻常的情况,一个启动 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 个根监督者来滥用监督树功能?
谢谢,
富有的