在Erlang控制台中运行此代码时
Pid = spawn(fun() -> "foo" end),link(Pid),receive X -> X end.
我收到以下错误.
** exception error: no such process or port in function link/1 called as link(<0.71.0>)```
legoscia.. 6
发生这种情况是因为您生成的进程非常快速地完成:它只"返回"一个字符串(并且返回值无处可去,因为它是新进程的调用堆栈中的顶级函数),因此它很可能完成在模拟器进入link
调用之前.
您可以通过在退出之前使进程进入睡眠状态来使其更有可能成功:
2> Pid = spawn(fun() -> timer:sleep(1000), "foo" end),link(Pid). true
但请注意,receive
示例中的表达式很可能不会收到任何内容,因为生成的进程不会发送任何消息,并且链接也不会生成任何消息,因为进程正常退出,并且调用进程很可能不是陷阱退出.您可能想要做以下事情:
Parent = self(), spawn(fun() -> Parent ! "foo" end), receive X -> X end.
那回来了"foo"
.