微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按其注册名中的子串搜索过程

如何解决按其注册名中的子串搜索过程

在 elixir 中,我可以使用其注册名称获取进程列表

for pid <- Process.list,do: {pid,Process.info(pid,:registered_name)}
[
  {#PID<0.0.0>,{:registered_name,:init}},{#PID<0.1.0>,: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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。