Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang从erl生成简单流程。。没有这样的进程或端口_Erlang_Erlang Shell - Fatal编程技术网

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

Erlang从erl生成简单流程。。没有这样的进程或端口,erlang,erlang-shell,Erlang,Erlang Shell,在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>)``` **异常错误:没有这样的进程或端口 在功能链接/1中 称为link()``` 发生这种情况是因为生成的

在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>)```
**异常错误:没有这样的进程或端口
在功能链接/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”

这是因为生成的进程完成得非常快:它只“返回”一个字符串(返回值不存在,因为它是新进程调用堆栈中的顶级函数),因此很可能在仿真器到达
链接
调用之前完成

通过在退出前使进程处于休眠状态,可以使其更有可能成功:

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”