我在erlang中有一个进程,它应该在spawn之后立即执行某些操作,然后在结束时将结果发送回父进程。我如何计算产生它的过程的PID?
答案 0 :(得分:14)
您应该将self()作为entry函数的参数之一传递给子节点。
spawn_link(?MODULE, child, [self()]).
答案 1 :(得分:4)
@Eridius的回答是首选的方法。要求进程注册名称可能会产生意想不到的副作用,例如提高流程的可见性,更不用说在有大量流程时提出独特名称的麻烦。
答案 2 :(得分:3)
最好的方法是将它作为参数传递给调用函数以启动子进程。如果你正在产生乐趣,这通常是一件好事,小心做:
spawn_link(fun () -> child(self()) end)
不会按预期执行。 (提示:何时调用self())
通常你应该避免注册一个进程,即给它一个全局名称,除非你真的希望它是全局知道的。产生乐趣意味着您不必导出衍生函数,因为您通常应该避免导出不打算从其他模块调用的函数。
答案 3 :(得分:0)
您可以使用BIF寄存器为产卵/父进程提供名称(原子),然后从其他进程返回注册名称。
FUNC() - >
%%做点什么 %%然后向父母发送消息 父母! MESSAGE。
...
注册(父母,自我()),
产卵(MODULE,FUNC,[ARGS])。
请参阅Getting Started With Erlang §3.3和The Erlang Reference Manual §10.3。