【问题标题】:Elixir - Get all PIDs for processes under a supervisorElixir - 获取主管下进程的所有 PID
【发布时间】:2016-07-03 23:53:53
【问题描述】:

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

关于如何做到这一点的任何建议?

【问题讨论】:

标签: elixir erlang-otp


【解决方案1】:

你可以使用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 的列表(如果需要)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 2017-03-09
    • 1970-01-01
    • 2023-04-04
    • 2021-08-08
    • 2016-01-31
    • 2011-07-11
    相关资源
    最近更新 更多