gpt4 book ai didi

Elixir进程监控: :EXIT vs :DOWN

转载 作者:行者123 更新时间:2023-12-02 05:41:33 26 4
gpt4 key购买 nike

我通常会看到进程监控的示例,其中处理受监控进程退出的代码如下:

handle_info({:DOWN, ref, :process, pid}, state)

但我也看到过它们匹配 :EXIT 而不是 :DOWN 消息的示例。

到目前为止,我只能在自己的示例中触发 :DOWN 消息,其中包括标准的 Process.exitGenServer.stop 消息,以及在受监控的进程中引发异常。

我什么时候会收到 :EXIT 消息?

最佳答案

:EXIT 被发送到另一个进程尝试使用 Process.exit 退出的进程(原因不是 :kill)但该过程正在捕获导出。 :DOWN 被发送到正在监视另一个进程的进程,并且被监视的进程因任何原因退出。

以下是两者的示例:

pid = spawn(fn ->
Process.flag(:trap_exit, true)
receive do
x -> IO.inspect {:child, x}
end
end)
Process.monitor(pid)
Process.sleep(500)
Process.exit(pid, :normal)
Process.sleep(500)
# A process cannot trap `:kill`; it _has_ to exit.
Process.exit(pid, :kill)
receive do
x -> IO.inspect {:parent, x}
end

输出:

{:child, {:EXIT, #PID<0.70.0>, :normal}}
{:parent, {:DOWN, #Reference<0.0.8.223>, :process, #PID<0.73.0>, :normal}}

关于Elixir进程监控: :EXIT vs :DOWN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42331707/

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