如何引用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模块。
它在重新启动,删除等方面更加灵活和强大。

链接地址: http://www.djcxy.com/p/38215.html

上一篇: How to reference previously started processes in an Elixir supervisor

下一篇: Erlang supervisor with one critical child