zoukankan      html  css  js  c++  java
  • erlang link 与 monitor

    erlang设计中,通常会有这样一个需求: 某一个进程必须依赖于令一个进程的概念,在这样的情况下就必须对两个进程之间建立一个监控或者说连接关系,以监听对方的死亡情况。

    erlang 提供了两个这样的方法:link/1  monitor/2

    1、双向监听

    -spec link(PidOrPort) -> true when
    PidOrPort :: pid() | port().

    link(_PidOrPort) ->
    erlang:nif_error(undefined).

    把调用的此方法的进程跟_PidOrPort 链接起来,他们之间的链接是相互的。如果一条进程被退出另一条进程会受到退出消息,格式为{'EXIT', Pid, Reason}

    如果彼此都是gen_server,可以这样截取信息:

      handle_info({'EXIT', _PID, _Reason}, State) ->

        ok.

    2、单向监听:即当前调用进程去监听另一个进程。

    -spec monitor(Type, Item) -> MonitorRef when
    Type :: process,
    Item :: pid() | RegName | {RegName, Node},
    RegName :: module(),
    Node :: node(),
    MonitorRef :: reference().

    monitor(_Type, _Item) ->
    erlang:nif_error(undefined).

    eg:  monitor(process, Pid), 即当前进程监听 Pid 的退出销毁信息,如果Pid被退出或者销毁, 你的当前进程会收到{'DOWN', _Ref, _Msg, _PID, _Reason} 这样的信息

    如果你的进程是gen_server 可以这样截取信息:

      handle_info({'DOWN', _Ref, _, _PID, _Reason}, State) ->
        ok.

    简单的使用就是如此,如果需要继续深入可以看看源码,或这样官方文档。

     
  • 相关阅读:
    ubuntu下安装配置apache2(含虚拟主机配置)
    ubuntu安装软件包apt-get和dpkg方法
    python日期,时间函数
    python多线程
    截取utf8中文字符串
    python解析json
    sqlite读写
    lambda,map,filter,reduce
    pyinstaller生成exe可执行程序
    对象练习
  • 原文地址:https://www.cnblogs.com/calvin-207/p/4371650.html
Copyright © 2011-2022 走看看