主管启动多个子进程作为原子操作

时间:2012-04-20 12:43:51

标签: erlang atomic supervisor

我需要以原子方式启动多个主管孩子。也就是说,如果组中的一个孩子在启动时失败,那么它们都不应该启动。

我将此操作视为一项功能:

start_children(SupRef, ChildSpecs)
ChildSpecs = List :: [child_spec()]

我应该如何以正确的方式实现这一点?任何例子,图书馆等?我的直觉告诉我,从列表中启动所有孩子,检查所有孩子是否都成功然后杀死剩下的孩子不是这样。

或许我的设计存在缺陷,我真的不应该做这些事情?

1 个答案:

答案 0 :(得分:2)

OTP的supervisor通过one_for_all策略为此提供支持。默认情况下,如果某个进程失败,则会重新启动所有进程,但您可以使用适合您的目的Restart参数(例如temporary)来更改此进程。