我有4个erlang节点在多进程应用程序上一起工作。 在我的订单中,一个进程是监视器,它在区域上绘制进程的位置,另外3个节点处理进程的位置和移动。 在监视器上,当密钥是进程PID时,我使用ETS数据库存储位置, 我注意到节点创建的进程具有相同的PID,这显然会中断整个系统的管理。
我尝试将流程连接到:
net_adm:ping(...).
net_kernel:connect(...).
希望当节点相互了解时,他们会给出不同的PID,但是没有用。
答案 0 :(得分:6)
PID可以打印相同,例如<0.42.0>
,但这只是一个输出约定:本地节点上的PID打印时,第一个数字为0
。如果您将此PID发送到另一个节点并在那里打印,它将打印为<2265.42.0>
或类似。 PID始终与运行进程的节点的名称相关联,您可以使用node(Pid)
来提取它。因此,来自不同节点的PID永远不会相等。
This answer详细介绍了PID的结构。