印刷されたプロセス ID < ABC > は6で構成されています。
- A、ノード番号 (0 はローカル ノード、リモート ノードの任意の番号)
- B、プロセス番号の最初の 15 ビット (プロセス テーブルへのインデックス) 7
- C、プロセス番号のビット 16 ~ 18 (B と同じプロセス番号) 7
内部的には、プロセス番号は 32 ビット エミュレータで 28 ビット幅です。B と C の奇妙な定義は、R9B とそれ以前のバージョンの Erlang に由来します。B は 15 ビットのプロセス ID であり、C は最大プロセス ID に達したときにインクリメントされるラップ カウンターであり、より低い ID が再利用されました。
erlang ディストリビューションでは、ノード アトムとその他の情報が含まれているため、PID は少し大きくなっています。(分散PID形式)
内部 PID が 1 つのノードから別のノードに送信されると、自動的に外部/分散 PID 形式に変換されるため、 1 つのノードで<0.10.0>
( inet_db
) になっているものは<2265.10.0>
、別のノードに送信されたときと同じになる可能性があります。通常どおりこれらの PID に送信できます。
% get the PID of the user server on OtherNode
RemoteUser = rpc:call(OtherNode, erlang,whereis,[user]),
true = is_pid(RemoteUser),
% send message to remote PID
RemoteUser ! ignore_this,
% print "Hello from <nodename>\n" on the remote node's console.
io:format(RemoteUser, "Hello from ~p~n", [node()]).
詳細については、内部 PID 構造、
ノード作成情報、
EPMD とのノード作成カウンターの相互作用を参照してください。