在 Elixir 中,依赖应用程序受到监督吗?

Jes*_*ieh 4 erlang elixir erlang-otp erlang-supervisor

到目前为止,我知道当我启动 Elixir 应用程序时,一堆依赖的应用程序也会启动。

这些依赖的应用程序是否以某种方式在我的应用程序监督树中启动?

如果依赖的应用程序崩溃会发生什么?是不是重启了?

Pas*_*cal 5

我猜想 Elixir 的应用程序就像 Erlang 一样。

  • 在Erlang中每个应用程序都有一个独立的监督树
  • 如果一个应用程序崩溃了,这意味着最顶层的supervisor确实崩溃了,并且所有的重启策略都失败了。仅仅增加一个新的监管层几乎不可能解决问题。
  • 可以使用 启动所有依赖项application:ensure_all_started(Application[,StartType]),StartType 可以是
    • temporary:(默认值):如果temporary应用程序因任何原因停止,则不会发生任何情况
    • permanentpermanent:如果应用程序因任何原因停止,所有其他应用程序都会终止
    • transient:所有其他应用程序终止是指transient应用程序因任何原因停止,但normal
  • 也可以调用application:ensure_started(Application[,StartType])每个依赖项。请注意,在这两种情况下,StartType仅控制一个应用程序终止对其他应用程序的影响,但没有应用重新启动策略。
  • 可以知道哪些应用程序正在运行application:which_applications()