erlang:demonitor/2
取消一个监控过程
用法:
demonitor(MonitorRef, OptionList) -> boolean()
取消一个监控过程,返回值一般是 true,除非 OptionList 里有 info 这个原子。
erlang:demonitor(MonitorRef, []) 等同于 demonitor(MonitorRef)。
当前可选的选项有:
flush:如果调用消息队列里有 {_, MonitorRef, _, _, _} 这样的消息,先删除消息,再停止监控过程。
调用 demonitor(MonitorRef, [flush]) 等同于调用以下代码,而且更高效:
demonitor(MonitorRef), receive {_, MonitorRef, _, _, _} -> true after 0 -> true end
info。
返回值会是以下之一:
true:监控器被找到并被删除。这个情况是监控进程上的调用消息队列没有 'DOWN' 消息。
false:监控器没有被找到并不可以被删除。这也许是调用消息队列上已经有 'DOWN' 类似的消息。
如果选项 info 跟选项 flush 组合在一起,如果需要一个清除,那么则返回 false,否则返回 true。
如果 OptionList 不是一个列表,或者选项不是一个合法的选项,那么将返回 bagarg。
MonitorRef = erlang:monitor(process, self()), erlang:demonitor(MonitorRef, [flush]).