Elixir:执行完该函数后,进程会发生什么

时间:2016-05-20 08:46:06

标签: process elixir

我试图理解Teplate parse errorspawn之间的差异,但不能完全理解当流程执行的功能结束时会发生什么。

spawn_link

我预计主要流程会失败,因为它与在程序结束前明显死亡的流程相关联。然而,"再见"打印消息,然后程序正常退出。将defmodule SendAndDie do def send_and_die(target) do send(target, "Goodbye") # Process.exit(self, :boom) end end dying_process = spawn_link(SendAndDie, :send_and_die, [self]) :timer.sleep(500) IO.puts("Dying process is alive: #{Process.alive?(dying_process)}") receive do msg -> IO.puts(msg) end 更改为spawn_link无效。

当我取消注释第4行中的spawn时,我确实看到了Process.exitspawn之间的区别(后者会停止整个程序,而前者则不会)。但是,spawn_linkProcess.exit函数中的最后一次执行。当函数结束时,无论如何都不会退出进程吗?

1 个答案:

答案 0 :(得分:7)

来自the erlang manual on processes

  

当进程收到退出原因不是正常的退出信号时,默认行为是终止,然后以相同的退出原因向其链接进程发出退出信号。

当进程的初始函数返回时,它以原因normal终止,因此此默认行为不会导致链接进程失效。