Erlang 主管将多个子项作为原子操作启动

Erlang 主管将多个子项作为原子操作启动,erlang,atomic,erlang-supervisor,Erlang,Atomic,Erlang Supervisor,我需要以原子的方式启动多个孩子。也就是说,如果组中的一个子项在启动时失败,则不应启动任何一个子项 我将此操作视为一种功能: start_children(SupRef, ChildSpecs) ChildSpecs = List :: [child_spec()] 我应该如何以适当的方式实现这一点?有任何例子、图书馆等吗。?我的直觉告诉我,从名单上所有的孩子开始,检查他们是否都成功,然后杀死剩下的孩子不是办法 或者我的设计有缺陷,我真的不需要做这样的事情吗?OTP的“一对一”策略为这一点提供了

我需要以原子的方式启动多个孩子。也就是说,如果组中的一个子项在启动时失败,则不应启动任何一个子项

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

start_children(SupRef, ChildSpecs)
ChildSpecs = List :: [child_spec()]
我应该如何以适当的方式实现这一点?有任何例子、图书馆等吗。?我的直觉告诉我,从名单上所有的孩子开始,检查他们是否都成功,然后杀死剩下的孩子不是办法


或者我的设计有缺陷,我真的不需要做这样的事情吗?

OTP的“一对一”策略为这一点提供了支持。默认情况下,如果某个进程失败,所有进程都将重新启动,但您可以使用适合自己的
Restart
参数(例如
temporary
)对此进行更改。

是,但我希望动态执行此操作。使用
one_for_all
时,如果使用
start_child
调用的子级失败,则将重新启动(或终止)此主管的所有子级,即使是以前启动的子级。我不想那样。我只希望孩子们在同一个名单上,因为没有一个会被杀。不应触摸以前开始的子项。如果我理解正确,您有多个子项列表。如果其中一个失败了,你只想杀死列表中的所有孩子,但不要碰另一个列表中的任何孩子。每个列表有一个主管(使用
one_for_all
strategy)怎么样?如果需要,再为这些主管安排一个主管?我考虑过了。但是,我想要附加子节点的主管已经在支持某些工作节点。我使用Erlang/OTP的经验告诉我,我不能混合子类型(工作节点和主管)。@gregorej您可以让主管和工作节点处于同一级别。请参阅