我有一名主管,想要知道在任何给定时间在该主管下运行的所有进程。似乎应该有一种简单的方法来获取Supervisor或节点下所有进程的所有PID,名称等,但我找不到任何东西。
有关如何执行此操作的任何建议吗?
答案 0 :(得分:15)
您可以使用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]}]
返回一个列表,其中包含有关给定所有子项的信息 主管。
注意在监督大量的时调用此函数 内存不足的儿童可能会导致内存不足 异常。
此函数返回
{id, child, type, modules}
元组的列表, 其中:
id
- 根据子规范中的定义
child
- 相应子进程的PID,:restarting
进程即将重新启动,如果没有,则为:undefined
过程
type
-:worker
或:supervisor
,由子规范指定
modules
- 由子规范指定
由于提供了type
和pid
,您可以递归地获取子项以生成所有pid的列表(如果需要)。