全球注册流程未注册 [英] Globally registered process is not registered
本文介绍了全球注册流程未注册的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用
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屋!
查看全文