【问题标题】:Erlang spawn simple process from erl .. no such process or portErlang 从 erl 生成简单进程 .. 没有这样的进程或端口
【发布时间】:2014-08-26 04:48:22
【问题描述】:

在 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>)```

【问题讨论】:

    标签: erlang erlang-shell


    【解决方案1】:

    这是因为你生成的进程完成得非常快:它只“返回”一个字符串(返回值无处可去,因为它是新进程调用堆栈中的顶级函数),所以它非常可能在模拟器调用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"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-11
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      相关资源
      最近更新 更多