Erlang主管和主管孩子

我有一个关于主管的问题。 例如,我有1个主管,我需要为这个主管执行一些start_child。 我必须首先启动我的主管? 或者我可以只supervisor:start_child(my_sup,[])没有启动my_sup吗?

谢谢。


首先,创建一个监督员流程作为监督树的一部分,称为supervisor:start_link/2supervisor:start_link/3 。 创建的主管进程调用Module:init/1来查找重启策略,最大重启频率和子规格。

这是启动gen_server的主管的示例代码(不过,您可以启动其他gen_ *模块):

-module(ch_sup).
-behaviour(supervisor).
-export([start_link/0]).
-export([init/1]).
start_link() ->
    supervisor:start_link(ch_sup, []).
init(_Args) ->
    {ok, {{one_for_one, 1, 60},
          [{ch3, {ch3, start_link, []},
            permanent, brutal_kill, worker, [ch3]}]}}.

元组{ch3, ...}是一个子规范,它是这样定义的:

{Id, StartFunc, Restart, Shutdown, Type, Modules}

在上例中,启动服务器ch3的子规范如下所示:

{ch3, {ch3, start_link, []}, permanent, brutal_kill, worker, [ch3]}

从示例中可以看到,模块ch3将由管理员启动,监视和停止,您还会看到通常使用的指定的one_for_one 重新启动策略 。 子规范中的one_for_one意味着如果一个子进程终止并应重新启动,则只有该子进程受到影响,这可能是您的情况。 主管人员会自动启动,监控,重新启动和停止您的子进程。

start_child/2用于动态添加子规范给启动相应子进程的主管SupRef

因此,supervisour总是首先启动,然后根据重新启动策略自动或手动启动其子进程。


是的,你应该先启动主管,因为你不会开始这个孩子,因为主管是启动孩子的主管。 希望能帮助到你。

链接地址: http://www.djcxy.com/p/38253.html

上一篇: Erlang supervisor and supervisor child

下一篇: server and state