Erlang主管和主管孩子
我有一个关于主管的问题。 例如,我有1个主管,我需要为这个主管执行一些start_child。 我必须首先启动我的主管? 或者我可以只supervisor:start_child(my_sup,[])
没有启动my_sup吗?
谢谢。
首先,创建一个监督员流程作为监督树的一部分,称为supervisor:start_link/2
或supervisor: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