我有一个关于受监控/链接进程死亡时间的问题,我想不出如何在实践中对其进行测试。这是我担心的情况。
假设我有一个名为 master
和 slave
的进程。
master
将 trap_exit
设置为 true
。 master
执行 {ok, Pid} = slave:start_link()
从而将两者联系起来。 master
相当于 gen_server:call(Pid, Msg)
。 Pid
之前。 问题:
master
会先收到 EXIT
消息吗?或 master
已死,{noproc,{gen_server..
会因 Pid
异常而失败吗? 最佳答案
不是经过验证的答案,但这是可能发生的情况。
首先我们应该明白的是 EXIT
是一条正在发送到 master
邮箱的消息。与 noproc
错误相反,master
错误是在 EXIT
进程上下文(不是消息)中生成的错误。
这意味着您可能会同时获得两者。问题是谁先来。
由于 call
消息是立即发送的,并且由于您说进程在 EXIT
到达之前崩溃,因此您将首先获得 EXIT
消息是有道理的。但是,由于它们是独立的,因此有一个选项,即在 master
消息到达 gen_server:call
邮箱之前,您的 noproc
将返回 ojit_code 错误。
如果您出于实现目的要求这样做,我建议涵盖这两种情况。我真的不认为 Erlang 会 promise 哪个会是第一个。
关于erlang - 当被监控的进程在 handle_call 完成之前死亡会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38885676/