在erlang中监视

tin*_*tin 5 erlang monitor

我是Erlang和编程的新手.我有关于显示器的问题.

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

4> flush().
Run Code Online (Sandbox Code Playgroud)

flush()的输出得到{'DOWN',#Ref <0.0.0.159>,进程,<0.69.0>,noproc}

我的问题是如果在创建监视器之前进程被杀死了,shell怎么会得到"DOWN"消息?

leg*_*cia 6

这是避免竞争条件的特征.请记住,对于当前所有进程都知道,其他进程可能随时死亡.因此,它可能会在调用之前或之后死亡erlang:monitor,并且必须为每个监视器考虑这两种情况是非常麻烦的.

这就是为什么监视死进程会给出与被监视进程终止时获得的消息形式相同的消息.唯一的区别是退出原因总是给出noproc.