Elixir - 在主管下获取进程的所有PID

时间:2016-03-17 14:43:01

标签: elixir otp

我有一名主管,想要知道在任何给定时间在该主管下运行的所有进程。似乎应该有一种简单的方法来获取Supervisor或节点下所有进程的所有PID,名称等,但我找不到任何东西。

有关如何执行此操作的任何建议吗?

1 个答案:

答案 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 - 由子规范指定

  •   

由于提供了typepid,您可以递归地获取子项以生成所有pid的列表(如果需要)。