Erlang完成或杀死进程

0xA*_*xAX 6 parallel-processing erlang process

我有erlang应用程序.在这个应用程序中我运行过程spawn(?MODULE, my_foo, [my_param1, my_param2, my_param3]).

而my_foo:

my_foo(my_param1, my_param2, my_param3) ->
  ...
  some code here
  ...
  ok.
Run Code Online (Sandbox Code Playgroud)

当我打开etop时,我看到这个my_foo/3功能状态: proc_lib:sync_wait/2

比我尝试将exit(self(),normal)放在我的函数结尾,但我看到相同的行为:proc_lib:sync_wait/2在etop中.

我怎样才能正确杀死或退出流程?

谢谢.

rvi*_*ing 19

需要注意的是exit(Pid, Reason)exit(Reason)如果做同样的事情Pid是过程本身.exit/1告诉当前进程退出 - 如果你愿意,从内部退出 - 同时exit/2向进程发送退出信号,即使进程本身也是如此.所以,当你这样做时,你exit(self(), normal)实际上是向normal自己发送退出信号,这被忽略了.

在这种情况下,将exit调用放在函数的末尾不应该有任何区别,因为normal当启动它的函数结束时,进程会自动死亡(有原因).似乎这个过程在此之前暂停了.

proc_lib:sync_wait/2在内部调用proc_lib:start/start_link并坐下并等待生成的进程proc_lib:init_ack/1/2返回start的返回值.您的流程似乎没有调用init_ack.