通过其注册名称中的子字符串进行搜索



在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)

最新更新