erlang监督者模式

来源:互联网 发布:比价商城源码 编辑:程序博客网 时间:2024/06/08 16:32

  实现监督者需要实现回调init/1,示例如下:

 

-module(sc_sup).-behaviour(supervisor).%% API-export([start_link/0]).%% Supervisor callbacks-export([init/1]).-define(SERVER, ?MODULE).start_link() ->    supervisor:start_link({local, ?SERVER}, ?MODULE, []).init([]) ->    ElementSup = {sc_element_sup, {sc_element_sup, start_link, []},                  permanent, 2000, supervisor, [sc_element]},    EventManager = {sc_event, {sc_event, start_link, []},                    permanent, 2000, worker, [sc_event]},    Children = [ElementSup, EventManager],    RestartStrategy = {one_for_one, 4, 3600},    {ok, {RestartStrategy, Children}}.
       其中:supervisor:start_link/3第一个参数的SERVER为注册进程名,init/1回调中RestartStrategy第一个参数表示启动策略,第二个参数表示最大启动次数,第三个参数表示时间片,上面就表示在3600秒内可以最多启动4次;Children为受监督的子进程,下面介绍子进程规范,



ElementSup = {sc_element_sup, {sc_element_sup, start_link, []},  

permanent, 2000, supervisor, [sc_element]},      

        子进程规范由6个元素组成{ID,Start,Restart,Shutdown,Type,Modules},其中Start是个三元组{Module,Function,Arguments},第三个元素可以取值permanent,temporary,transient分别表示始终重启、永不重启、意外终止时重启,Shutdown可取brutal_kill,infinity及某个时间值,分别表示立即终止、充分时间终止与某段时间后终止,第五个元素可取supervisor、worker表示进程身份,第六个表示所依赖的模块。


ElementSup = {sc_element_sup, {sc_element_sup, start_link, []}, permanent, 2000, supervisor, [sc_element]},
0 0
原创粉丝点击