如何让erlang获得节点名称的pid?

md-*_*-86 -2 erlang pid

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

leg*_*cia 7

Erlang节点没有一个pid:每个节点上都运行着许多进程,因此您需要指定所需的进程.

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

(foo@localhost)1> rpc:call(bar@localhost, erlang, whereis, [foo]).
<7120.56.0>
Run Code Online (Sandbox Code Playgroud)

虽然您可能不需要:如果要将消息发送到另一个节点上的命名进程,您可以使用{Name, Node}而不是先获取pid.例如,将消息发送到被叫的过程foobar@localhost:

{foo, bar@localhost} ! my_message
Run Code Online (Sandbox Code Playgroud)

你也可以转向另一个方向,从pid获取节点名称,node/1功能如下:

(foo@localhost)1> RemotePid = rpc:call(bar@localhost, erlang, whereis, [foo]).
<6928.32.0>
(foo@localhost)2> node(RemotePid).
bar@localhost
Run Code Online (Sandbox Code Playgroud)