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

In Elixir, are dependent applications supervised?

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

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

如果依赖的应用程序崩溃会怎样?重启了吗?

我猜 Elixir 在应用程序方面像 Erlang 一样工作。

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

在 Erlang VM 中,所有应用程序都作为子应用程序启动 application_master。
每个应用程序都有 StartType,可以是 temporarytransientpermanent.
之一 permanent,在某些情况下 transient 应用程序崩溃将影响整个 Erlang VM(VM 将崩溃并创建 crash.dump 文件)。
根据 Elixir application module 你可以在 start/2.

中设置你的依赖类型