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承诺哪一个会是第一个