ElixirのSupervisorについて
Supervisor
他のプロセス(子プロセス)を監視し、それらがクラッシュした際に再起動させる役割を持つプロセス
code:elixir
defmodule MyModule.Supervisor do
use Supervisor
def start_link(opts) do
Supervisor.start_link(__MODULE__, :ok, opts)
end
@impl true
def init(:ok) do
children = [
MyModule.SomeProcess # {MyModule.SomeProcess, name: MyModule.SomeProcess}
]
Supervisor.init(children, strategy: :one_for_one)
end
end
Supervisor.init/2
Supervisorを初期化する
監視対象の子プロセスと監視ストラテジを受け取る
Supervisorが開始すると、それぞれの子プロセスのchild_spec/1を呼ぶ
child_spec/1の戻り値に応じて、プロセスの起動方法が変わる
child_spec/1はSupersivorやAgent、GenServer等をuseすると自動で定義される
参考