全球注册流程未注册 [英] Globally registered process is not registered

查看:134
本文介绍了全球注册流程未注册的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用

spawn (node, module, function, Args) 
global:register_name(name, pid)

要在全球不同节点上注册一个进程。

To register a process on a different node globally.

这里是代码

Pid = spawn(mi, loop, [X]),
io:format("Glavni PID: ~w~n", [Pid]),
register(glavni, Pid),

Pid1 = spawn (prvi@Molly, mi, loop_prvi, []),
io:format("Prvi PID: ~w~n", [Pid1]),
global:register_name (prvi, Pid1),

当我运行代码时,它不会发生任何错误,但是当我尝试whereis(进程)时,我会在生成它的节点上被定义

When I run the code, it doesn't throw any error but when I try whereis(process) I get undefined on a node that spawned it.

这是什么进程控制台说:

Here's what process' console says:

Pid = spawn(mi, loop, [X]),
io:format("Glavni PID: ~w~n", [Pid]),
register(glavni, Pid),

Pid1 = spawn (prvi@Molly, mi, loop_prvi, []),
io:format("Prvi PID: ~w~n", [Pid1]),
global:register_name (prvi, Pid1),

当我从任何节点尝试whereis(process)时,主节点或节点我创建了进程,它说:

And when I try to whereis(process) from any node, either the master node or the node I created the process on, it says:

(prvi@Molly)2> whereis(prvi).
undefined
(prvi@Molly)3> whereis(prvi@Molly).
undefined


推荐答案

要在几个节点上注册必须:

To register on several nodes you have to:


  • 启动sevral节点

  • 确保他们使用相同的cookie

  • 连接它们(例如在节点A中执行net_adm:ping(B))

  • 使用spawn(node,...)启动节点B上的进程/ li>
  • 注册全局:register_name(name,Pid)

  • 检查全局注册:whereis_name(name)

  • start sevral nodes
  • ensure they use the same cookie
  • connect them (for example in node A, execute net_adm:ping(B))
  • start a process on node B with spawn(node,...)
  • register it with global:register_name(name, Pid)
  • check the registration with global:whereis_name(name)

您至少想念最后一点,但都是必要的。

you miss at least the last point, but all of them are necessary.

这篇关于全球注册流程未注册的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆