我试图理解之间的差异spawn和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
Run Code Online (Sandbox Code Playgroud)
我预计主要过程会失败,因为它与在程序结束前明显死亡的过程相关联.但是,打印"Goodbye"消息,然后程序正常退出.更改spawn_link到spawn没有任何效果.
当我取消注释第Process.exit4行时,我确实看到了spawn和之间的区别spawn_link(后者在整个程序中停止而前者没有).但是,这Process.exit是send_and_die函数中的最后一次执行.当函数结束时,进程是否会退出?
当进程收到退出原因不是正常的退出信号时,默认行为是终止,然后以相同的退出原因向其链接进程发出退出信号.
当进程的初始函数返回时,它会以原因终止normal,因此这种默认行为不会导致链接进程失效.
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |