如果进程A链接到B,A监视B,当B死亡时,A会发生什么?A会收到两条消息吗?一条是监视器“关闭”消息,另一条是来自B的退出消息,如果是,顺序是什么,A会怎么做?
thigvfpy1#
当链接和监视器被触发时,它们会发出 * 信号 * -您可以在此处阅读有关此内容的更详细信息: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的退出信号到达时,它会立即被杀死。如果它先得到监视器信号,它可能会开始行动,但在行动进行到一半时,当收到退出信号时,它会被杀死。
1条答案
按热度按时间thigvfpy1#
当链接和监视器被触发时,它们会发出 * 信号 * -您可以在此处阅读有关此内容的更详细信息: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的退出信号到达时,它会立即被杀死。如果它先得到监视器信号,它可能会开始行动,但在行动进行到一半时,当收到退出信号时,它会被杀死。