全球注册流程未注册

时间:2014-04-30 10:40:55

标签: process erlang

我正在使用

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

全局注册不同节点上的进程。

这是代码

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(进程)时,我在生成它的节点上得到了未定义。

这是'控制台说的过程:

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(进程)时,无论是主节点还是我创建进程的节点,它都说:

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

1 个答案:

答案 0 :(得分:3)

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

  • 启动sevral nodes
  • 确保他们使用相同的Cookie
  • 连接它们(例如在节点A中,执行net_adm:ping(B))
  • 使用spawn(node,...)
  • 在节点B上启动一个进程
  • 将其注册为global:register_name(name,Pid)
  • 使用global检查注册:whereis_name(name)

你至少错过了最后一点,但所有这些都是必要的。