Erlang从erl中生成简单的进程..没有这样的进程或端口

 yyuunn传奇 发布于 2023-01-06 12:07

在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".

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有