0

我尝试使用在本地注册 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 )生成的远程节点(RN )创建进程,但我希望该进程使用RN的 group_leader ,而不是LN进行 io 操作。谢谢你。

4

3 回答 3

2

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

  • 该名称已注册。
  • 该进程已经死了,没有检查 group_leader 进程是否还活着。

我重复@OJ 关于你为什么要给它命名的问题。

于 2010-12-23T04:11:01.490 回答
2

最简单的方法是让您在远程节点上生成的代码执行以下操作:

io:format(user, FormatString, FormatArguments)

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

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

于 2010-12-26T02:10:41.953 回答
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?"]]}).
于 2010-12-24T01:40:34.257 回答