lyse - Errors and Processes

erlang里面可以使用link来监控其他进程是否死亡。
link是双向的,并且如果多次在两个相同之间调用Link只会有一条link产生。
相连进程如果由某一进程因某种原因而终止,会通过一种叫做信号的特殊消息传递给相连进程,该信号会自动作用于相连进程并杀死它。
通过process_flag(exit_trap,true)可以将进程变为系统进程,从而将退出信号转换成普通的消息。
exit/2函数可以用于杀死其他进程。
有个很有意思的例子:

exit(spawn_link(fun()->timer:sleep(50000) end), kill)
Untrapped Result:** exception exit:killed
Trapped Result:{'EXIT', <0.58.0>, killed}

exit(self(), kill)
Untrapped Result:** exception exit:killed
Trapped Result:** exception exit: killed

spawn_link(fun()-> exit(kill) end)
Untrapped Result:** exception exit:killed
Trapped Result:{'EXIT', <0.67.0>, kill}

我们可以捕获大多数exit,但是对于Kill的话,是无法trap的,因为有些进程可能处于无限的循环中,使用这个机制可以有效的终止他们。我们可以注意到,因为kill消息的缘故,如果接受他的进程没有转换成killed,那么和他相连的进程也会因为Kill消息而终止。
但是要注意的是exit(kill)捕获的消息是kill而不是killed。

除了Link之外,我们也可以使用monitors,主要有两处不同,首先它是单向监控,其次它是可以在两个相同进程之间多次调用的。
每当被监视进程down掉的时候,监视进程的每一个监视都会收到{‘DOWN’, MonitorReference, process, Pid, Reason}消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值