我尝试使用
在本地注册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 用于io操作的strong>,而不是 LN 。 谢谢。
答案 0 :(得分:2)
当然你可以注册它,group_leader像任何pid一样是pid。您收到错误有两个原因:
我重复@ 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?"]]}).