如何确定进程父级的PID

时间:2008-08-07 01:54:12

标签: erlang

我在erlang中有一个进程,它应该在spawn之后立即执行某些操作,然后在结束时将结果发送回父进程。我如何计算产生它的过程的PID?

4 个答案:

答案 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.3The Erlang Reference Manual §10.3