我在 erlang 中有一个进程,应该在生成后立即执行某些操作,然后在完成时将结果发送回父级。如何找出生成它的进程的 PID?

有帮助吗?

解决方案

您应该将 self() 作为入口函数的参数之一传递给子级。

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

其他提示

@Eridius' 的答案是首选的方法。要求进程注册名称可能会产生意想不到的副作用,例如增加进程的可见性,更不用说当您有很多进程时提出唯一名称的麻烦。

最好的方法肯定是将其作为参数传递给调用以启动子进程的函数。如果您正在产生乐趣(这通常是一件好事),请小心执行以下操作:

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

这不会如你所愿。(暗示:self() 何时被调用)

一般来说,您应该避免注册进程,即给它起一个全球性的名字,除非你真的想让它全球闻名。生成一个 fun 意味着您不必导出生成的函数,因为您通常应该避免导出不打算从其他模块调用的函数。

您可以使用 BIF 寄存器为生成/父进程指定一个名称(原子),然后引用其他进程的注册名称。

功能()->

%% 做一点事
%% 然后发送消息给家长
家长!信息。

...

注册(父级,自我()),
产卵(模块,功能,[ARGS])。

Erlang 入门§3.3Erlang 参考手册 §10.3.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top