在 Erlang 中链接和监视同一个进程时会发生什么

Cak*_*ang 2 erlang erlang-otp

如果进程 A 链接到 B 并且 A 监视 B,那么当 B 死亡时,A 会发生什么?A会收到两条消息吗?一个是监听“Down”消息,另一个是 B 的退出消息,如果是,顺序是什么,A 将做什么?

Ric*_*rdC 5

当链接和监视器被触发时,它们会发出信号- 您可以在这里阅读更多详细信息: https: //www.erlang.org/doc/reference_manual/processes.html#signals

查看 BEAM 模拟器代码,发现当进程终止时,链接会在监视器之前触发 - 请参阅 erl_process.c: https: //github.com/erlang/otp/blob/master/erts/emulator/beam/ erl_process.c#L14149

我似乎找不到任何地方记录这个事实,但我猜这是为了确保如果进程 A 不捕获退出,则当进程 B 的退出信号到达时,它会立即被终止。如果它首先收到监视器信号,它可能会开始对其进行操作,但当收到退出信号时,它可能会在操作中途被杀死。