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_supはタイプであるためです。したがって、 Supervisor:start_child/2simple_one_for_oneを介して明示的に要求された場合にのみ子プロセスを開始します。

スーパーバイザーが他のタイプ ( one_for_oneone_for_allまたはrest_for_one) であった場合、起動時に子仕様のすべての子を開始しようとしますが、simple_one_for_oneスーパーバイザーは、引数リストのみが異なる多数の子を作成するためのものであるため、その場合関数内の子仕様はinit、テンプレートの役割を果たすだけです。

于 2012-04-25T09:24:01.747 に答える