退出信号
当接收到 {'EXIT',Pid,ExitReason} 信号时, Erlang 的行为可以描述成如下代码:
- if(ExitReason == kill)then
- broadcast(killed) % note we change ExitReason
- die
- else
- if(trapping exits)then
- add {'EXIT', Pid, ExitReason}
- to input mailbox
- else
- if(ExitReason == normal) then
- continue
- else
- broadcast(ExitReason)
- die
- endif
- endif
- endif
如果进程表示符为 Sender 的进程运行一个简单的函数 exit(Pid,Why) ,那么进程 Pid 就会收到一个代表进程 Sender好像死亡的消息 {'EXIT',Source,Why} 。
如果进程正常终止,把信号 {'EXIT',Source,normal} 发送到所有的链接进程.
函数 exit(Pid,kill) 产生一个无法销毁的消息,它使的接收进程无条件死亡,把退出的原因改为 killed 并把退出的原因发送给所有的链接进程(如若不然,可能使服务器意想不到的崩溃).