团体领导的本地注册

时间:2010-12-23 01:01:53

标签: erlang local leader

我尝试使用

在本地注册group_leader()
register( iogl, group_leader()).

但它返回bad_arg错误

** exception error: bad argument
 in function  register/2
    called as register(iogl,<0.29.0>)

如何为group_leader()流程提供本地符号名称?

我可以使用

将其注册为全局名称
global:register_name(iogl, group_leader()).

但它不是我需要的。

UPD:真正的问题:

我使用来自本地节点( LN )的spawn在远程节点( RN )上创建进程,但我希望该进程使用 RN的group_leader ,而不是 LN 。 谢谢。

3 个答案:

答案 0 :(得分:2)

当然你可以注册它,group_leader像任何pid一样是pid。您收到错误有两个原因:

  • 该名称已经注册。
  • 该进程已经死亡,没有检查group_leader进程是否处于活动状态。

我重复@ OJ的问题,为什么你要给它一个名字。

答案 1 :(得分:2)

最简单的方法是在远程节点上生成的代码:

io:format(user, FormatString, FormatArguments)

这将导致远程代码使用远程IO组负责人进行输出。您也可以使用远程生成的代码将其group_leader设置为user生成后不久的pid,然后它可以正常使用io:format/2并将其输出发送到正确的位置远程节点。

我想简短的回答是,任何节点上标准组长进程的注册(符号)名称都是user

答案 2 :(得分:1)

远程节点上生成会有所帮助。 每个节点都需要一些spawner进程,就像标准的rpc模块一样。

Couudant的rexi库实现了这样的功能。 https://github.com/cloudant/rexi 见rexi:cast / 3:

rexi:cast(remote_node, self(), {io, format, ["~p~n", ["where to go the output?"]]}).