1

我在 my_sup.erl 中有一个函数,如下所示:

init([ems_media_sup]) ->
  {ok, {{simple_one_for_one, ?MAX_RESTART, ?MAX_TIME}, [
   {ems_media_sup, {ems_media, start_link, []}, temporary, 2000, worker, [ems_media]}]
}};

但是ems_media.erl中没有名为start_link/1的函数,我想知道为什么运行时没有错误

supervisor:start_link(?MODULE, [ems_media_sup])

那么,如何知道调用 init([ems_media_sup]) 之后发生了什么

4

1 回答 1

3

这是因为my_supis 类型simple_one_for_one- 所以它只会在通过supervisor:start_child/2明确要求时启动子进程。

如果主管是任何其他类型(或) one_for_one,它会在启动时尝试启动子规范中的所有子代,但是主管用于创建大量仅根据其参数列表而变化的子代,因此在这种情况下函数中的子规范仅起到模板的作用。one_for_allrest_for_onesimple_one_for_oneinit

于 2012-04-25T09:24:01.747 回答