1

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

例如,主管sup1产生一个创建主管的子进程sup2

4

3 回答 3

7

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

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

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

也许你也可以通过孩子自己开始监督来做到这一点,但它至少不那么优雅,而且你在做什么也不那么明显。

HTH,H。

于 2009-12-02T23:22:05.693 回答
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 (behaviour gen_server)

init([]) ->
    {ok, #state{status=starting, interested=[]}}.

像梦一样工作......!

于 2009-12-03T00:30:31.760 回答
2

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

toolbar:start()

这为您提供了主管层次结构的图形视图。快速浏览一下内核主管树,或 mnesia 或 yaws,将向您展示“正常”主管树的样子。

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

于 2009-12-03T11:54:42.610 回答