2016-07-08 9 views

答えて

2

最も簡単な方法は、新しいモジュール内の関数でこのコードを置くだけでspawn_linkを通じて、この関数を呼び出しますstart_link機能を追加し、あなたのSupervisorからworkerとしてそのモジュールを追加することです。私が入力されましたが、Streamerが起動するたびに、すべてのPID値を印刷している間出力が起こっていたように、これは、従うことは少し難しいかもしれません

#PID<0.85.0> 
iex(1)> 1 
2 
3 
1 
2 
3 
1 
2 
Process.exit3pid(0, 85, 0), :kill) 

#PID<0.88.0> 
1 
true 
iex(2)> 2 
3 
1 
2 
3 
1 
2 
3 
Process.exit(pid(0, 88, 0), :kill) 
#PID<0.90.0> 
true 
1 
iex(3)> 2 
3 
1 
2 
3 

defmodule M do 
    use Application 

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

    children = [ 
     worker(M.Streamer, []), 
    ] 

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

defmodule M.Streamer do 
    def start_link do 
    {:ok, spawn_link(__MODULE__, :main, [])} 
    end 

    def main do 
    IO.inspect(self) 
    for i <- Stream.cycle([1, 2, 3]) do 
     IO.puts i 
     :timer.sleep(1000) 
    end 
    end 
end 

デモ:ここでは簡単な例ですProcess.exit行は私が入力したコードであり、trueはそれらの呼び出しの戻り値です。ご覧のとおり、私がM.Streamerプロセスを終了するたびに、スーパーバイザによってプロセスが再開されました。

関連する問題