Frage

Ich habe eine Frage zum Supervisor. Zum Beispiel habe ich 1 Supervisor und muss für diesen Vorgesetzten ein Start_Child ausführen. Muss ich zuerst anfangen, meinen Vorgesetzten zu starten? Oder kann ich nur supervisor:start_child(my_sup,[]) Ohne my_sup starten?

Vielen Dank.

War es hilfreich?

Lösung

Zuerst erstellen Sie einen Supervisorprozess als Teil einer Aufrufanrufung eines Supervisionsbaums supervisor:start_link/2 oder supervisor:start_link/3. Der erstellte Supervisor -Prozessaufrufe Module:init/1 Um die Neustartstrategie, die maximale Neustartfrequenz und die Kinderspezifikationen zu finden.

Dies ist der Beispielcode für einen Vorgesetzten, der startet Gen_Server (Sie können jedoch andere Gen_* -Module starten):

-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]}]}}.

Das Tupel {ch3, ...} ist ein Kinderspezifikation, was so definiert ist:

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

Die untergeordnete Spezifikation zum Starten des Servers ch3 Im obigen Beispiel sieht aus wie:

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

Aus dem Beispiel sehen Sie dieses Modul ch3 wird von dem Vorgesetzten gestartet, überwacht und angehalten, sehen Sie auch one_for_one Starten Sie die Strategie neu angegeben, was im Allgemeinen verwendet wird. one_for_one In der Kinderspezifikation bedeutet, dass, wenn ein Kinderprozess endet und neu gestartet werden sollte, nur dieser Kinderprozess betroffen ist und dies wahrscheinlich Ihr Fall ist. Ihre Kinderprozesse werden vom Supervisor automatisch gestartet, überwacht, neu gestartet und automatisch gestoppt.

start_child/2 wird verwendet, um dem Vorgesetzten dynamisch eine untergeordnete Spezifikation hinzuzufügen SupRef das startet den entsprechenden Kinderprozess.

So wird das Supervisour immer zuerst gestartet, dann werden seine Kinderprozesse automatisch oder manuell auf der Grundlage des Starten Sie Strategien neu.

Andere Tipps

Ja, Sie sollten zuerst den Vorgesetzten starten, da Sie das Kind nicht gründen, da der Vorgesetzte derjenige ist, der das Kind startet. Ich hoffe es hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top