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 つ持つことで、スーパーバイザ ツリー機能を悪用していますか?
ありがとう、
リッチ