【问题标题】:Processes spawned on connected nodes get same PID在连接节点上产生的进程获得相同的 PID
【发布时间】:2014-09-17 09:53:12
【问题描述】:

我有四个 Erlang 节点在多进程应用程序上协同工作。 在我的订单中,一个进程正在监控,它在该区域绘制进程的位置,而其他三个节点处理进程的位置和移动。在监视器上,当关键是进程 PID 时,我使用 ETS 数据库来存储位置。我注意到节点创建的进程具有相同的 PID,这显然会中断整个系统的管理。

我已尝试将进程与:

net_adm:ping(...).
net_kernel:connect(...).

我希望当节点相互了解时,它们会给出不同的 PID,但那没有用。

【问题讨论】:

    标签: erlang


    【解决方案1】:

    PID 可以打印相同,例如<0.42.0>,但这只是一个输出约定:打印本地节点上的 PID,第一个数字是 0。如果您将此 PID 发送到另一个节点并在那里打印,它将打印为 <2265.42.0> 或类似名称。 PID 始终与进程运行所在节点的名称相关联,您可以使用node(Pid) 提取它。因此,来自不同节点的 PID 永远不会比较相等。

    This answer 详细介绍了 PID 的结构。

    【讨论】:

    • 你是对的,我只是从不同的节点发送 self() 并且它在发送节点上显示 PID 后缀为 0,它在接收节点上显示为 6832。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2012-05-28
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多