在elixir中,我可以用获得带有注册名称的进程列表
for pid <- Process.list, do: {pid, Process.info(pid, :registered_name)}
[
{#PID<0.0.0>, {:registered_name, :init}},
{#PID<0.1.0>, {:registered_name, :erts_code_purger}},
...
如何仅获取寄存器名称中包含子字符串的进程?
示例:只获取寄存器名称中包含子字符串MyApp
的进程。
最好使用Enum.reduce/3
单次通过
Enum.reduce(Process.list(), [], fn(pid), acc ->
with {:registered_name, name} = reg_name <- Process.info(pid, :registered_name),
true <- name |> to_string() |> String.contains?("proxy"),
do: [reg_name | acc],
else: (_ -> acc)
end)
Process.list
|> Enum.filter(fn(pid) ->
{:registered_name, name} = Process.info(pid, :registered_name)
to_string(name) =~ "MyApp"
end)
|> Enum.map(fn pid -> Process.info(pid, :registered_name) end)