2016-03-17 2 views
5

У меня есть диспетчер и вы хотите знать все процессы, выполняемые под этим Supervisor в любой момент времени. Кажется, должен быть простой способ получить все PID, имена и т. Д. Для всех процессов под супервизором или в узле, но я ничего не могу найти.Elixir - Получить все PID для процессов под супервизором

Любые предложения по тому, как это сделать?

+0

В будущем ссылка на модуль модуля Elixir Supervisor приведена здесь: http://elixir-lang.org/docs/stable/elixir/Supervisor.html –

ответ

10

Вы можете использовать Supervisor.which_children/1:

iex> Supervisor.which_children(MyApp.Supervisor) 
[{MyApp.SubSupervisor, #PID<0.1695.0>, :supervisor, [MyApp.SubSupervisor]}, 
{MyApp.Endpoint, #PID<0.1686.0>, :supervisor, [MyApp.Endpoint]}] 

Эта функция возвращает список кортежей, содержащих:

идентификатор - как это определено в спецификации дочернего или не определено в случае simple_one_for_one руководителя

child - pid соответствующего дочернего процесса, атом: перезапуск, если процесс вот-вот должен быть перезапущен, или: undefined, если такого процесса нет

тип -: работник или: руководитель, как это определено в спецификации дочернего

модули - как это определено в детской спецификации

С type и pid предоставляются вы можете рекурсивно принести детям, чтобы генерировать список всех сообщений, если требуется.

Смежные вопросы