Erlang进程错误处理的术语含义

  1. 进程
    进程有两种:普通进程和系统进程。spawn创建的是普通进程。普通进程可以通过执行内 置函数process_flag(trap_exit, true)变成系统进程,系统进程是一种能接收和处理错误信号的进程。
  2. 连接
    进程可以互相连接。如果A和B两个进程有连接,而A出于某种原因终止了,就会向B发送 一个错误信号,反之亦然。
    为了创建连接,我们会调用基本函数link(Pid),它会在调用进程和Pid之间创建一个连接。 如:P1调用link(P3),P1和P3之间就会建立连接。
  3. 连接组
    进程P的连接组是指与P相连的一组进程。
    如果P1调用了link(P3),P3又调用了link(P10),P1的连接组只有一个元素(P3),而P3的连接组有两个元素(P1和P10),以此类推。
    a.同步终止的进程组
    假设我们有一些相互连接的进程而其中的某个进程挂了,错误信号会被发送给与它相连的所有进程。最后,错误信号扩散到了所有相连的进程,整个互连进程组都终止了。
    b.设立防火墙 :
    有时候我们不希望相连的进程全部终止,而是想让系统里的错误停止扩散.要实现这一点,可以执行process_flag(trap_exit, true)把进程转变成一个系统进程(意思是它可以捕捉退出信号),,阻止错误扩散到系统里的其他进程中。
  4. 监视
    监视和连接很相似,但它是单向的。如果A监视B,而B出于某种原因终止了,就会向A发 送一个“宕机”消息,但反过来就不行了。
  5. 消息和错误信号
    进程协作的方式是交换消息或错误信号。消息是通过基本函数send发送的,错误信号则 是进程崩溃或进程终止时自动发送的。错误信号会发送给终止进程的连接组。
  6. 错误信号的接收
    当系统进程收到错误信号时,该信号会被转换成{‘EXIT’, Pid, Why}形式的消息。Pid 是终止进程的标识,Why是终止原因(有时候被称为退出原因)。如果进程是无错误终止, Why就会是原子normal,否则Why会是错误的描述。
    当普通进程收到错误信号时,如果退出原因不是normal,该进程就会终止。当它终止时, 同样会向它的连接组广播一个退出信号
  7. 显式错误信号
    任何执行exit(Why)的进程都会终止(如果代码不是在catch或try的范围内执行的话), 并向它的连接组广播一个带有原因Why的退出信号。 进程可以通过执行exit(Pid, Why)来发送一个“虚假”的错误信号。在这种情况下,Pid会 收到一个带有原因Why的退出信号。调用exit/2的进程则不会终止(这是有意如此的)。
  8. 不可捕捉的退出信号
    系统进程收到摧毁信号(kill signal)时会终止。摧毁信号是通过调用exit(Pid, kill) 生成的。这种信号会绕过常规的错误信号处理机制,不会被转换成消息。摧毁信号只应该 用在其他错误处理机制无法终止的顽固进程上。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值