2

我的应用程序在三个节点上运行pcpc0, pc1. 起初,当我一起启动它们时,第一个节点开始运行,当我退出第一个节点的外壳时,第二个(pc0)启动,当我退出第二个的外壳时,第三个(pc1)开始运行。但是,如果我在 pc1 仍在运行时重新启动 pc 和 pc0,则两个节点都崩溃了,说强制节点 pc1 已关闭。我想知道,pc1 正在运行,但其他节点在说"pc1 is down"

{"Kernel pid terminated",application_controller,"{application_start_failure,kernel,{{shutdown,{failed_to_start_child,kernel_config,{mandatory_nodes_down,['myapp@pc-1']}}},{kernel,start,[normal,[]]}}}"}

这可能是什么原因?

4

1 回答 1

1

您的应用程序中有全局名称注册器吗?接管过程是首先在高优先级节点启动应用程序。然后关闭其他节点的应用程序。这意味着您将在短时间内出现全局名称冲突。

默认全局名称冲突解决程序是 global:random_exit_name()。它将随机获取pid。所以它可能会杀死高优先级节点的进程并导致应用程序关闭。

我的解决方案是始终在本地保持进程注册。所以在接管时是没有问题的。然后使用 global:re_register_name() 注册全局名称。

于 2013-12-20T09:04:38.947 回答