Erlang 当被监视的进程在handle_调用完成之前终止时会发生什么?
我有一个关于监控/链接进程死亡时间的问题,我想不出如何在实践中测试它。这是我担心的情况 假设我有一个名为Erlang 当被监视的进程在handle_调用完成之前终止时会发生什么?,erlang,otp,gen-server,Erlang,Otp,Gen Server,我有一个关于监控/链接进程死亡时间的问题,我想不出如何在实践中测试它。这是我担心的情况 假设我有一个名为master和slave的进程 master将trap\u退出设置为true master执行{ok,Pid}=slave:start_link()从而将两者链接起来 master执行与gen\u server:call(Pid,Msg)等效的操作 在消息到达Pid之前,进程崩溃 问题: master是否会首先收到EXIT消息?或 master是否会因{noproc,{gen_server..
master
和slave
的进程
master
将trap\u退出设置为true
master
执行{ok,Pid}=slave:start_link()
从而将两者链接起来master
执行与gen\u server:call(Pid,Msg)
等效的操作Pid
之前,进程崩溃master
是否会首先收到EXIT
消息?或master
是否会因{noproc,{gen_server..
异常而失败,因为Pid
已经失效这不是一个经过验证的答案,但以下是可能发生的情况 我们首先应该了解的是,
EXIT
是发送到master
s邮箱的消息。与noproc
错误相反,noproc是在master
进程上下文中生成的错误(不是消息)。这意味着你很可能两者都会得到。问题是谁会先来 由于
退出
消息将立即发送,并且您说进程在调用
到达之前崩溃,因此您将首先获得退出
消息是有意义的。不过,由于它们是独立的,因此在退出
消息到达主机之前有一个选项>s邮箱,您的gen_服务器:call
将返回noproc
错误
如果您是出于实现目的而问这个问题,我建议涵盖这两种情况。我真的不认为Erlang承诺哪一个会是第一个