在Erlang / OTP中监控

丁丁

我有一个关于显示器的问题。

1> Pid=spawn(fun() -> timer:sleep(500000) end).
2> exit(Pid, kill).
3> Ref=erlang:monitor(process, Pid).

4> flush().

我的shell中flush()的输出是 {'DOWN',#Ref<0.0.0.159>,process,<0.69.0>,noproc}

我的问题是:如果进程在创建监视器之前被杀死,那么shell是如何得到'DOWN'消息的呢?

乐高积木

这是避免竞争情况的功能。请记住,就目前所知,所有其他进程可能随时消失。因此,它可能会在调用之前或之后终止erlang:monitor,并且必须为每个监视器都考虑这两种情况。

这就是为什么监视死进程会产生与被监视进程死后所得到的消息具有相同形式的消息的原因。唯一的区别是退出原因始终为noproc

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章