如何在erlang中获取节点名称的pid?

How to get in erlang the pid of a node name?

我有一个节点:app01@mdiaz,我需要知道 pid(类似于 <2908.77.0> )


一个Erlang节点没有一个pid:每个节点上运行着很多进程,所以你需要指定你想要的。

如果你想知道节点bar@localhost上以foo名字注册的进程的pid,你可以对erlang:whereis/1进行RPC调用:

1
2
(foo@localhost)1> rpc:call(bar@localhost, erlang, whereis, [foo]).
<7120.56.0>

虽然您可能不需要:如果您想向另一个节点上的命名进程发送消息,您可以使用 {Name, Node} 而不是首先获取 pid。例如,要向 bar@localhost 上名为 foo 的进程发送消息:

1
{foo, bar@localhost} ! my_message

你也可以用 node/1 函数从 pid 中获取节点名称:

1
2
3
4
(foo@localhost)1> RemotePid = rpc:call(bar@localhost, erlang, whereis, [foo]).
<6928.32.0>
(foo@localhost)2> node(RemotePid).
bar@localhost