erlang link 与 monitor

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

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

一、双向监听设计

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

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

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

若是彼此都是gen_server,能够这样截取信息:源码

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

    ok.监控

 

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

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

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.

简单的使用就是如此,若是须要继续深刻能够看看源码,或这样官方文档。

相关文章
相关标签/搜索