Erlang simple_one_for_one супервизор terminate_child не работает - PullRequest
2 голосов
/ 21 октября 2011

Согласно документам Erlang, вы можете использовать функцию supervisor: terminate_child с супервизорами simple_one_for_one, если вы передаете PID процесса вместо идентификатора дочерней спецификации. Однако, на практике это не работает для меня, и вместо этого функция возвращает обратно {error, simple_one_for_one}. Вот что я вижу:

(client-1@nick-desktop)9> supervisor:which_children(my_sup).
[{undefined,<0.544.0>,worker,[cf_server]}]
(client-1@nick-desktop)10> P.
<0.544.0>
(client-1@nick-desktop)11> supervisor:terminate_child(my_sup, P).
{error,simple_one_for_one}

Я что-то не так делаю, или документы на Erlang неточны? Если я не могу остановить процесс с супервизором: terminate_child, я должен просто вместо этого вызвать exit (P, shutdown)?

1 Ответ

4 голосов
/ 22 октября 2011

Какую версию erlang вы используете?Я думаю, что supervisor:terminate_child/2 было разрешено только для simple_one_for_one супервизоров, начиная с R14B03.

Автор: Сири Хансен Дата: вт 12 апреля 16:47:17 2011 + 0200

Allow supervisor:terminate_child(SupRef,Pid) for simple_one_for_one

supervisor:terminate_child/2 was not allowed if the supervisor used
restart strategy simple_one_for_one. This is now changed so that
children of this type of supervisors can be terminated by specifying
the child's Pid.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...