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

Nag*_*i45 4 process elixir

我试图理解之间的差异spawnspawn_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
Run Code Online (Sandbox Code Playgroud)

我预计主要过程会失败,因为它与在程序结束前明显死亡的过程相关联.但是,打印"Goodbye"消息,然后程序正常退出.更改spawn_linkspawn没有任何效果.

当我取消注释第Process.exit4行时,我确实看到了spawn和之间的区别spawn_link(后者在整个程序中停止而前者没有).但是,这Process.exitsend_and_die函数中的最后一次执行.当函数结束时,进程是否会退出?

Paw*_*rok 7

来自erlang手册的流程

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

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