【发布时间】:2019-01-10 02:43:56
【问题描述】:
我有一个监督树,为了简单起见,假设一名监督员 (S) 持有一名工作人员 (W),策略为 :one_for_one。
在某些情况下,我需要重新初始化W,而最简单的方法就是让它崩溃。我有两种不同的选择:Process.exit/2 和/或Supervisor.restart_child/2:
Process.exit(W, :kill)
和
[{id, _, :worker, _}] = Supervisor.which_children(S)
Supervisor.terminate_child(S, w_id)
Supervisor.restart_child(S, w_id)
既然存在后者,我想它可能会更好用,但我不知道使用它会有什么好处。假设将针对策略:rest_for_one 和许多孩子,前者将重新启动工人列表的整个尾部,而后者将仅重新启动该特定工人。我找不到任何合理的文档,也没有在代码库中发现这种差异。
所以,问题是:当使用:one_by_one 策略时,通过terminate → restart 循环或Process.exit(pid, :kill) 是否足够?
【问题讨论】: