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

===============>>#1 票数:14 已采纳

您应该将self()作为entry函数的参数之一传递给子节点。

spawn_link(?MODULE, child, [self()]).

===============>>#2 票数:4

@Eridius的回答是首选方法。 要求进程注册名称可能会产生意想不到的副作用,例如提高进程的可见性,更不用说在有大量进程时提出独特名称的麻烦。

===============>>#3 票数:3

最好的方法是将它作为参数传递给被调用以启动子进程的函数。 如果你正在产生乐趣,这通常是一件好事,小心做:

spawn_link(fun () -> child(self()) end)

这不会像你想象的那样做。 (提示:何时调用self())

一般来说,你应该避免注册一个进程,即给它一个全局名称,除非你真的希望它是全球知名的。 产生乐趣意味着您不必导出衍生函数,因为您通常应该避免导出不打算从其他模块调用的函数。

===============>>#4 票数:0

您可以使用BIF寄存器为产卵/父进程提供名称(原子),然后返回其他进程的注册名称。

FUNC() - >

%% 做一点事
%%然后向父母发送消息
父母! 信息。

...

注册(父母,自我()),
产卵(MODULE,FUNC,[ARGS])。

请参阅Erlang§3.3入门Erlang参考手册§10.3

  ask by ricree translate from so

未解决问题?本站智能推荐: