我正在启动监督两个孩子的主管。第二个孩子需要对第一个孩子的引用。这样的接缝应该是可能的,因为通过使用one_for_rest
策略,我可以确保如果第一次死亡,第二次重新启动。
children = [
supervisor(SupervisorA, [arg1]),
supervisor(SupervisorB, [arg2, ref_to_supervisor_a_process]),
]
supervise(children, strategy: :one_for_rest)
理想情况下,无需全局命名任何一个流程。
答案 0 :(得分:1)
SupervisorA
可以向name:
提供Supervisor.start_link/3
选项。
SupervisorB
可以使用Process.whereis/1
将名称解析为pid
,或者只是将消息发送到指定的进程。
https://hexdocs.pm/elixir/Supervisor.html#start_link/3 https://hexdocs.pm/elixir/Process.html#whereis/1
答案 1 :(得分:0)
Supervisor.Spec.supervisor/3
返回spec
。
有人可能会通过:
{id, _, _, _, _, _} = sup_a = supervisor(SupervisorA, [arg1])
children = [
sup_a,
supervisor(SupervisorB, [arg2, id]),
]
答案 2 :(得分:0)
我建议使用Director代替主管模块 它在重新启动,删除等方面更灵活,更强大。