> Erlang中文手册 > demonitor/2 取消一个监控过程

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]).