实现监督者需要实现回调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]},
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐