mix run终止我的程序

时间:2017-03-07 12:57:52

标签: erlang elixir otp mix

一直在努力缠绕我的脑袋,并希望有人能指出我正确的方向。

我跑了mix new my_other_app --sup并得到了波纹管应用程序:

defmodule MyOtherApp do

  def start_link do
    Task.start_link(fn -> loop() end)
  end

  def loop do
    IO.puts "running..."
    :timer.sleep(1000)
    loop()
  end
end

我的申请主管:

defmodule MyOtherApp.Application do
  use Application

  def start(_type, _args) do
    import Supervisor.Spec, warn: false

    children = [
      worker(MyOtherApp, [])
    ]

    opts = [strategy: :one_for_one, name: MyOtherApp.Supervisor]
    Supervisor.start_link(children, opts)
  end
end

并混合application/0

def application do
  [extra_applications: [:logger],
   mod: {MyOtherApp.Application, []}]
end

现在我的问题是:

  • 为什么当我运行mix app.start时,应用程序会立即运行并停止运行?
  • 我何时会运行mix app.start而不是mix run
  • 我知道我可以mix run --no-halt让应用程序继续运行,但为什么呢?为什么如果我删除主管并在我的loop/0底部拨打my_other_app.ex,它会继续与mix run一起运行,但是对于主管,它不会?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这个问题似乎与我在未受监督的任务流程中调用loop/0函数的方式有关。

非常简单,但写这篇文章的过程帮助我实现了目标;)

感谢橡皮鸭,SO;)

编辑:当我开始mix run vs mix app.start

时,我仍然会给那些可以向我解释的人留下正确答案

由于