Erlang:级联主管?

时间:2009-12-02 22:06:07

标签: erlang supervisor

是否可以在应用程序中级联主管?

E.g。主管sup1产生了一个创建主管sup2的儿童过程?

3 个答案:

答案 0 :(得分:7)

您可能希望将孩子添加为主管。

这是主管孩子的childspec中的条目。孩子的“类型”可以设置为“主管”:

http://www.erlang.org/doc/design_principles/sup_princ.html#spec

也许你可以通过孩子自己创办一个主管来做到这一点,但它至少不那么优雅,你不太明白你在做什么。

HTH, 小时。

答案 1 :(得分:3)

是的,您可以简单地将主管添加为主管的子女。或混合搭配。我通常做这样的事情:

(在我的高层主管)

init([]) ->
    Args = [],
    ModuleArray = [get_info(Module, Args)
           || Module
              <- [emx_nodestate, emx_sup_data, emx_sup_util, emx_sup_api,
                  emx_flow]],
    {ok, {{one_for_one, 3, 1}, ModuleArray}}.

get_info(Module, Args) ->
    {Module, {Module, start_link, [Args]}, permanent, 10000,
     worker, [Module]}.

然后像emx_sup_data(行为主管)这样的东西包含:

init([]) ->
    Args = [],
    ModuleArray = [get_info(Module, Args)
           || Module <- [job_housekeep]],
    {ok, {{one_for_all, 3, 1}, ModuleArray}}.

get_info(Module, Args) ->
    {Module, {Module, start_link, [Args]}, permanent, 10000,
     worker, [Module]}.

和emx_nodestate(behavior gen_server)

之类的东西
init([]) ->
    {ok, #state{status=starting, interested=[]}}.

像梦一样......!

答案 2 :(得分:2)

要了解其他人如何构建他们的应用程序,为什么不启动shell并运行工具栏:

toolbar:start()

这为您提供了主管层次结构的图形视图。快速查看内核管理器树,或者mnesia或yaws,将向您显示“正常”主管树的外观。

您组成由应用程序主管监督的子系统的应用程序。每个子系统可以是子系统管理员下的许多子子系统(继续以递归功能方式应用模式,直到你的粒度用完为止......)