erlang中进程之间的关系有:连接,监视。它们针对的都是进程,是对进程之间错误处理服务。
前言
本文仅仅是对连接或监视的进程挂掉或崩溃的情况着重分析,对于连接和监视的详细知识点未作详细整理。
连接
可以利用erlang:link/1 ,erlang:spawn/link/1 ,erlang:spawn/3来创建,连接的进程是双向的,也就是如果A和B连接,那么不管A还是B挂了,都会向对方发送错误信号;
当一个连接中的一个进程挂了,比如A连接B,B挂了,那么会有如下一些情况:
- 如果A是系统进程,那么会将B发出的错误信号转化为{‘EXIT’,Pid,Why}的消息,这个消息可以被接收处理,并且系统进程A不会挂掉。
注:系统进程会转换和处理错误信号,系统进程和普通进程可以通过process_flag(trap_exit,true/false),来相互转换。 - 如果A是普通进程,那么会对B挂掉的原因进行分析(这个原因包含在错误信号中),如果原因返回的是normal原子,代表B进程是无错误结束(比如进程没有更多的代码可执行),那么A进程不会挂掉;如果返回的不是normal原