如何引用Elixir主管中以前启动的流程
我开始监督两个孩子的主管。 第二个孩子需要参考第一个孩子。 它的接缝应该是可能的,因为通过使用one_for_rest
策略,我可以确保如果第一次死亡,第二次重新启动。
children = [
supervisor(SupervisorA, [arg1]),
supervisor(SupervisorB, [arg2, ref_to_supervisor_a_process]),
]
supervise(children, strategy: :one_for_rest)
理想情况下,无需全球命名任一流程。
SupervisorA
可以向Supervisor.start_link/3
提供name:
选项。
然后, SupervisorB
可以使用Process.whereis/1
将名称解析为pid
或仅将消息发送到指定的进程。
https://hexdocs.pm/elixir/Supervisor.html#start_link/3 https://hexdocs.pm/elixir/Process.html#whereis/1
Supervisor.Spec.supervisor/3
返回spec
。
人们可以通过它:
{id, _, _, _, _, _} = sup_a = supervisor(SupervisorA, [arg1])
children = [
sup_a,
supervisor(SupervisorB, [arg2, id]),
]
我建议使用Director而不是Supervisor模块。
它在重新启动,删除等方面更加灵活和强大。
上一篇: How to reference previously started processes in an Elixir supervisor