今日学习通过调用gen_server1中的handle_call使gen_server1挂掉从而让gen_server2程序也挂掉
gen_server1模块
-module(gen_server1).
-export([start_link/0, init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,start/0,send_msg/0]).
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
init([]) ->
{ok, []}.
handle_call(stop, _From, Tab) ->
io:format("gen_server1 receive stop~n"),
gen_server:cast(gen_server2,msg), %%给gen_server2发送相应消息
{stop, normal, stopped, Tab}.
handle_cast(_Msg, State) ->
{noreply, State}.
handle_info(_info, State) ->
{noreply, State}.
terminate(_Reason, _State) ->
ok.
send_msg() ->
gen_server:call(?MODULE, stop).
start() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
gen_server2模块
-module(gen_server2).
-export([start_link/0, init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,start/0]).
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
init([]) ->
erlang:send_after(10000, self(), timeout),
{ok, []}.
handle_call(_Msg, _From, State) ->
{noreply, State}.
handle_cast(msg, State) ->
%%对相应的gen_server1中的消息进行接收并相应挂掉
io:format("gen_server2 receive msg~n"),
exit(normal),
{noreply, State}.
handle_info(_Info, State) ->
{noreply, State}.
terminate(_Reason, _State) ->
ok.
start() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).