我在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])
之后知道接下来发生了什么答案 0 :(得分:3)
因为my_sup
的类型为simple_one_for_one
- 所以它只会在supervisor:start_child/2明确要求时启动子进程。
如果主管是任何其他类型(one_for_one
,one_for_all
或rest_for_one
),它会尝试在启动时启动子规范中的所有子项,但是{{ 1}} supervisor用于创建大量的子级,这些子级只根据其参数列表而有所不同,因此在这种情况下,simple_one_for_one
函数中的子规范只扮演模板的角色。