gpt4 book ai didi

process - Elixir:执行完函数后进程会发生什么

转载 作者:行者123 更新时间:2023-12-04 23:41:06 26 4
gpt4 key购买 nike

我试图了解 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

我预计主进程会失败,因为它与一个在程序结束前明显死亡的进程相关联。但是,打印“再见”消息,然后程序正常退出。换 spawn_linkspawn没有效果。

当我取消注释 Process.exit在第 4 行中,我确实看到了 spawn 之间的区别和 spawn_link (后者停止整个程序而前者不停止)。但是, Process.exitsend_and_die 中的最后一次执行功能。函数结束时进程不是要退出吗?

最佳答案

来自 the erlang manual on processes

The default behaviour when a process receives an exit signal with an exit reason other than normal, is to terminate and in turn emit exit signals with the same exit reason to its linked processes.



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

关于process - Elixir:执行完函数后进程会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37342069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com