Вопрос

У меня есть вопрос о руководителе. Например, у меня есть 1 супервайзер, и мне нужно выполнить какой -то start_child для этого руководителя. Должен ли я начать первым началом моего руководителя? Или я могу только supervisor:start_child(my_sup,[]) без начала my_sup?

Спасибо.

Это было полезно?

Решение

Сначала вы создаете процесс супервизора как часть призвания дерева надзора supervisor:start_link/2 или же supervisor:start_link/3. Анкет Созданные вызовы процесса супервизора Module:init/1 Чтобы узнать о стратегии перезапуска, максимальной частоты перезапуска и детских спецификаций.

Это пример кода для начала руководителя gen_server (Однако вы можете начать другие модули 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]}]}}.

Кортеж {ch3, ...} это Спецификация ребенка, что определено таким образом:

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

Спецификация ребенка для запуска сервера ch3 В приведенном выше примере выглядит:

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

Из примера вы видите этот модуль ch3 Будет начато, контролируется и остановлен руководителем, вы также видите one_for_one перезапуск стратегии указано, что обычно используется. one_for_one В спецификации ребенка означает, что если один дочерний процесс заканчивается и должен быть перезапущен, затронут только этот дочерний процесс, и это, вероятно, ваш случай. Ваши дочерние процессы запускаются, контролируются, перезапускаются и автоматически останавливаются руководителем.

start_child/2 используется для динамического добавления спецификации ребенка к руководителю SupRef который запускает соответствующий дочерний процесс.

Таким образом, надзор всегда начинается сначала, затем его дочерние процессы начинаются автоматически или вручную на основе Перезапустить стратегии.

Другие советы

Да, вы должны сначала запустить руководителя, потому что вы не будете начинать ребенка, так как руководитель - это тот, который запускает ребенка. Надеюсь, поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top