Erlang最开始是为了电信产品而发展起来的语言,因为这样的目的,决定了她对错误处理的严格要求。Erlang除了提供exception,try catch等语法,还支持Link和Monitor两种监控进程的机制,使得所有进程可以连接起来,组成一个整体。当某个进程出错退出时,其他进程都会收到该进程退出的消息通知。有了这些特点,使用erlang建立一个简单,并且健壮的系统就不是什么难事。
进程双向监控-Link
link方式可以建立进程之间的双向链接关系,当其中一个进程退出时,另一个进程会收到该进程退出的消息。
例子1:
-module(test).
-export([start/0]).
start() ->
Pid = spawn(fun() ->loop() end),
Pid2 = spawn(fun() ->loop_link(Pid) end),
io:format("Pid ~p~nPid2 ~p~n", [Pid,Pid2]).
loop_link(Pid) ->
process_flag(trap_exit, true),
erlang:link(Pid),
receive
Msg ->
io:format("pid exit: ~p~n", [Msg])
end.
loop() ->
process_flag(trap_exit, true),
receive
Msg ->
io:format("pid2 exit: ~p~n", [Msg])
end.
运行代码:
1> test:s