- 启动一个督程
启动一个督程
在上面的例子中,督程是通过调用 ch_sup:start_link() 来启动的:
- start_link() ->
- 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} :
- init(_Args) ->
- {ok, {{one_for_one, 1, 60},
- [{ch3, {ch3, start_link, []},
- permanent, brutal_kill, worker, [ch3]}]}}.
该督程然后根据启动规格中的子进程规格启动所有的子进程。这里只有一个子进程—— ch3 。
注意 supervisor:start_link 是同步的。只有所有的子进程都启动了,它才会返回。