• 启动一个督程

    启动一个督程

    在上面的例子中,督程是通过调用 ch_sup:start_link() 来启动的:

    1. start_link() ->
    2. supervisor:start_link(ch_sup, []).

    ch_sup:start_link 调用了函数 supervisor:start_link/2 。这个函数产生了一个督程并联接到其上。

    • 第一个参数 ch_sup 是回调模块的名字,也就是回调函数 init 所放的那个模块。
    • 第二个参数,[], 这个值将被原封不动传递给回调函数 init。在这里,init无须任何输入数据将忽略这个参数。在这个例子中,该督程没有被注册。则必须使用它的pid。可以通过调用 supervisor:start_link({local,Name},Module,Args) 或者 supervisor:start_link({global,Name},Module,Args)

    新的督程调用回调函数 ch_sup:init([])init 要返回 {ok,StartSpec}

    1. init(_Args) ->
    2. {ok, {{one_for_one, 1, 60},
    3. [{ch3, {ch3, start_link, []},
    4. permanent, brutal_kill, worker, [ch3]}]}}.

    该督程然后根据启动规格中的子进程规格启动所有的子进程。这里只有一个子进程—— ch3

    注意 supervisor:start_link 是同步的。只有所有的子进程都启动了,它才会返回。