Format of Pids

Rickard Green
Tue Jun 3 14:51:34 CEST 2003


Vance Shipley wrote:
  > What can be said about the format of Pids?
  > Pids (and references and ports) look like:
  >     <0.11.0>
  > These numbers seem to be refered to as num,
  > serial and creation.  What do these things mean?



NodeId is a node local number identifying another node. For example,
on node a@REDACTED NodeId for node b@REDACTED can be 4711, but on node c@REDACTED NodeId
for node b@REDACTED can be 17. 0 is special and means this node. On pre-R9B
nodes NodeId is an 8-bit unsigned integer. On R9B (and later) nodes
NodeId is a 32-bit (or 64-bit) unsigned integer.

Creation is an integer which identifies "the creation of a node".
Creation is incremented when a node is restarted. Currently creation
is a 2-bit unsigned integer. 0 is special and means something like:
actual creation used right now. Creation isn't shown when a pid is

Number and Serial are two integers identifying the process on the node
which the process resides on. Currently number is a 15-bit unsigned
integer and serial is a 3-bit unsigned integer.

Number used to (pre-R9B) be used as index into the process table
(an array), today the index might be a part of Number or a combination
of Number and a part of Serial.


NodeId and Creation as for Pids.

Id is an integer identifying the port on the node which the port
resides on. Currently Id is an 18-bit unsigned integer.


NodeId and Creation as for Pids.

The three unsigned integers Id1, Id2, Id3 are (almost) unique for
references created on the same node. Currently Id1 is an 18-bit
unsigned integer, and Id2 and Id3 are 32-bit unsigned integers,
i.e. there can at most be 2^82 unique references created on the same

  > I am working with them in erl_interface and
  > would like to understand them better.  For instance if I want to
quickly test if a Pid
  > exists I could do if(pid->serial).  But is
  > that right or is num the right field to check?
  > Or do I really have to compare the whole
  > structure?

Yes, when testing for equality you have to compare the hole

  > I seem to see that the first field is '0' if
  > the Pid is local and something else if it's remote.  Is that number
  > the same on other nodes?

See above.

  >  I assume that these Pids are munged
  > on the way through the distribution.

In the external format, nodename is used instead of NodeId.

  > Just curious ...
  >     -Vance

Rickard Green, Erlang/OTP, Ericsson AB

More information about the erlang-questions mailing list