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.
简单的使用就是如此,若是须要继续深刻能够看看源码,或这样官方文档。