Pregunta

Tengo una pregunta sobre el supervisor. Por ejemplo, tengo 1 supervisor y necesito ejecutar algo de inicio para este supervisor. ¿Debo comenzar en primer lugar comenzar a mi supervisor? O solo puedo supervisor:start_child(my_sup,[]) sin my_sup comenzando?

Gracias.

¿Fue útil?

Solución

Primero crea un proceso de supervisor como parte de una llamada de árbol de supervisión supervisor:start_link/2 o supervisor:start_link/3. El proceso de supervisor creado llama Module:init/1 Para conocer la estrategia de reinicio, la frecuencia de reinicio máxima y las especificaciones del niño.

Este es el código de ejemplo para un supervisor que comienza gen_server (Sin embargo, puede comenzar otros módulos gen_*):

-module(ch_sup).
-behaviour(supervisor).
-export([start_link/0]).
-export([init/1]).
start_link() ->
    supervisor:start_link(ch_sup, []).
init(_Args) ->
    {ok, {{one_for_one, 1, 60},
          [{ch3, {ch3, start_link, []},
            permanent, brutal_kill, worker, [ch3]}]}}.

La tupla {ch3, ...} es un Especificación infantil, que se define de esta manera:

{Id, StartFunc, Restart, Shutdown, Type, Modules}

La especificación infantil para iniciar el servidor ch3 En el ejemplo anterior parece:

{ch3, {ch3, start_link, []}, permanent, brutal_kill, worker, [ch3]}

Del ejemplo ves ese módulo ch3 será iniciado, monitoreado y detenido por el supervisor, también ves one_for_one Reiniciar estrategia especificado que generalmente se usa. one_for_one En la especificación del niño significa que si un proceso de un niño termina y debe reiniciarse, solo ese proceso infantil se ve afectado, y este es probablemente su caso. Los procesos de su hijo son iniciados, monitoreados, reiniciados y detenidos automáticamente por el supervisor.

start_child/2 se usa para agregar dinámicamente una especificación infantil al supervisor SupRef que inicia el proceso infantil correspondiente.

Por lo tanto, el supervisor siempre se inicia primero, luego sus procesos infantiles se inician de forma automática o manual en función del reiniciar estrategias.

Otros consejos

Sí, primero debe comenzar el supervisor porque no comenzará al niño ya que el supervisor es el que inicia al niño. Espero eso ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top