{"rsdb":{"rid":"170009","subhead":"","postdate":"0","aid":"124530","fid":"88","uid":"1","topic":"1","content":"
\u8bbe\u7f6e\u4e86 trap_exit<\/span> \u4e3a true <\/span>\u7684\u8fdb\u7a0b\uff0c\u5728\u6536\u5230 \u975ekill<\/span> \u7684\u9000\u51fa\u4fe1\u53f7\u65f6\u5019\uff0c\u4f1a\u628a\u8be5\u4fe1\u53f7\u8f6c\u6362\u4e3a\u666e\u901a\u7684\u6d88\u606f\uff0c\u800c\u4e0d\u4f1a\u9000\u51fa\uff1b \u7528\u7b80\u5355\u7684\u4f8b\u5b50\u9a8c\u8bc1\uff1a<\/p> \n <\/p> \n \u7f16\u8bd1\u8fd9\u4e2a test_gen_server<\/span> \u6a21\u5757\uff0c\u7136\u540e\u5728erlang shell\u91cc\u9762\u505a\u5982\u4e0b\u6d4b\u8bd5\uff1a<\/p> \n \u4ece\u4e0a\u9762\u6d4b\u8bd5\u7ed3\u679c\u6765\u770b\uff0c\u5728\u6536\u5230 kill<\/span> \u9000\u51fa\u4fe1\u53f7\u4e4b\u524d\uff0ctest_gen_server<\/span> \u90fd\u628a\u9000\u51fa\u4fe1\u53f7\u8f6c\u6362\u4e3a\u666e\u901a\u6d88\u606f\uff0c\u5e76\u901a\u8fc751\u884c\u7684info\u5b8f\u6253\u5370\u51fa\u6765\u4e86\uff1b \u628a\u8bbe\u7f6e trap_exit <\/span>\u8fdb\u7a0b\u6807\u8bb0\u7684 41 \u884c\u6ce8\u91ca\u6389\uff0c\u7f16\u8bd1\u5e76\u91cd\u65b0\u52a0\u8f7d test_gen_server<\/span> \u6a21\u5757\u518d\u8fdb\u884c\u6d4b\u8bd5\uff1a<\/p> \n
\u901a\u8fc7 gen_server:handle_msg\/5<\/span> \u548c gen_server:handle_msg\/6<\/span> \u51fd\u6570\u53ef\u77e5\uff0c\u82e5\u8fdb\u7a0b\u81ea\u8eab\u53d1\u751f\u9519\u8bef\u7684\u65f6\u5019\uff0c\u5373\u4f7f\u8bbe\u7f6e\u4e86 trap_exit<\/span> \u4e3a true<\/span>\uff0c\u8fdb\u7a0b\u6700\u7ec8\u4e5f\u4f1a\u8c03\u7528 ?MODULE:terminate\/2<\/span> \u8fdb\u884c\u9000\u51fa\u3002<\/span> <\/p> \n 1<\/span> -module<\/span>(test_gen_server).\r\n<\/span> 2<\/span> \r\n 3<\/span> -behavior(gen_server).\r\n<\/span> 4<\/span> \r\n 5<\/span> %%<\/span> apis<\/span>\r\n 6<\/span> -export<\/span>([\r\n<\/span> 7<\/span> start\/0,\r\n<\/span> 8<\/span> start_link\/0\r\n 9<\/span> ]).\r\n<\/span>10<\/span> \r\n11<\/span> %%<\/span> callbacks<\/span>\r\n12<\/span> -export<\/span>([\r\n<\/span>13<\/span> init\/1,\r\n<\/span>14<\/span> handle_call\/3,\r\n<\/span>15<\/span> handle_cast\/2,\r\n<\/span>16<\/span> handle_info\/2,\r\n<\/span>17<\/span> terminate\/2,\r\n<\/span>18<\/span> code_change\/3\r\n19<\/span> ]).\r\n<\/span>20<\/span> \r\n21<\/span> %%<\/span> \u5b57\u7b26\u4e32\u5b8f<\/span>\r\n22<\/span> -define(str_concat(Format, Args), lists:flatten(io_lib:format(Format, Args))).\r\n<\/span>23<\/span> \r\n24<\/span> %%<\/span> \u65e5\u5fd7\u5b8f<\/span>\r\n25<\/span> -define(err(Format, Args), error_logger:error_report(?str_concat("Module: ~p, Line:~p~n" ++ Format, [?MODULE, ?LINE | Args]))).\r\n<\/span>26<\/span> -define(info(Format, Args), io:format(?str_concat(Format ++ " in Module: ~p at Line: ~p~n", Args ++ [?MODULE, ?LINE]), [])).\r\n<\/span>27<\/span> \r\n28<\/span> %%<\/span> \u8fdb\u7a0b\u72b6\u6001\u7ed3\u6784\u5b9a\u4e49<\/span>\r\n29<\/span> -record(state, {}).\r\n<\/span>30<\/span> \r\n31<\/span> %%<\/span> Apis -------------------------------<\/span>\r\n32<\/span> start() ->\r\n33<\/span> gen_server:start({local, ?MODULE}, ?MODULE, [], []).\r\n<\/span>34<\/span> \r\n35<\/span> start_link() ->\r\n36<\/span> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).\r\n<\/span>37<\/span> \r\n38<\/span> %%<\/span> Callbacks --------------------------<\/span>\r\n39<\/span> init([]) ->\r\n40<\/span> ?info("gen_server: ~p init !", [?MODULE]),\r\n<\/span>41<\/span> erlang:process_flag(trap_exit, true<\/span>),\r\n<\/span>42<\/span> {ok, #state{}}.\r\n<\/span>43<\/span> \r\n44<\/span> handle_call(_Msg, _From, State) ->\r\n45<\/span> {reply, reply, State}.\r\n<\/span>46<\/span> \r\n47<\/span> handle_cast(_Msg, State) ->\r\n48<\/span> {noreply, State}.\r\n<\/span>49<\/span> \r\n50<\/span> handle_info(Msg, State) ->\r\n51<\/span> ?info("recv info msg: ~p !", [Msg]),\r\n<\/span>52<\/span> {noreply, State}.\r\n<\/span>53<\/span> \r\n54<\/span> terminate(normal, _State) ->\r\n55<\/span> ?info("gen_server: ~p stopped, reason: normal", [?MODULE]);\r\n<\/span>56<\/span> terminate(Reason, _State) ->\r\n57<\/span> ?err("gen_server: ~p stopped, reason: ~p", [?MODULE, Reason]).\r\n<\/span>58<\/span> \r\n59<\/span> code_change(_OldVsn, State, _Extra) ->\r\n60<\/span> {ok, State}.\r\n<\/span>61<\/span> \r\n62<\/span> %%<\/span> Privates ---------------------------<\/span><\/pre> \n <\/div> \n
E:\\Worksapce\\erlang_test>erl -pa ebin\/\r\nEshell V7.<\/span>1 (abort with ^G)\r\n<\/span>1> {ok, Pid} = test_gen_server:start().\r\ngen_server: test_gen_server init <\/span>! in Module: test_gen_server at Line: 34\r\n{ok,<\/span><0.33.0>}\r\n<\/span>2> erlang:exit(Pid, stop).\r\nrecv info msg: {<\/span>'EXIT',<0.31.0>,stop} ! in Module: test_gen_server at Line: 45\r\ntrue<\/span>\r\n3> erlang:exit(Pid, shutdown).\r\nrecv info msg: {<\/span>'EXIT',<0.31.0>,shutdown} ! in Module: test_gen_server at Line: 45\r\ntrue<\/span>\r\n4> erlang:exit(Pid, any).\r\nrecv info msg: {<\/span>'EXIT',<0.31.0>,any} ! in Module: test_gen_server at Line: 45\r\ntrue<\/span>\r\n5> erlang:exit(Pid, kill).\r\ntrue
<\/span>\r\n<\/span><\/pre> \n <\/div> \n
\u4f46\u5728\u6536\u5230 kill<\/span> \u9000\u51fa\u4fe1\u53f7\u65f6\uff0c\u5e76\u6ca1\u6709 ?MODULE:<\/span>terminate\/2<\/span> \u51fd\u6570\u7684\u6253\u5370\uff0c\u56e0\u4e3a test_gen_server<\/span> \u6536\u5230 kill<\/span> \u4fe1\u53f7\u540e\u65e0\u6761\u4ef6\u7684\u9a6c\u4e0a\u7ec8\u6b62\u4e86\uff0c\u800c\u6ca1\u6709\u6267\u884c ?MODULE:<\/span>terminate\/2<\/span> \u51fd\u6570\u3002<\/p> \n 1> {ok, Pid} = test_gen_server:start().\r\ngen_server: test_gen_server init <\/span>! in Module: test_gen_server at Line: 35\r\n{ok,<\/span><0.33.0>}\r\n<\/span>2> erlang:exit(Pid, normal).\r\n<\/span>true<\/span>\r\n3> erlang:is_process_alive(Pid).\r\n<\/span>true<\/span>\r\n4> erlang:exit(Pid, any).\r\n<\/span>true<\/span>\r\n5> erlang:is_process_alive(Pid).\r\n<\/span>false<\/span>\r\n6> {ok, Pid2} =","orderid":"0","title":"erlang trap_exit\u6807\u8bb0(\u4e00)","smalltitle":"","mid":"0","fname":"Erlang","special_id":"0","bak_id":"0","info":"0","hits":"5778","pages":"2","comments":"0","posttime":"2017-10-09 14:05:14","list":"1507529114","username":"admin","author":"","copyfrom":"","copyfromurl":"","titlecolor":"","fonttype":"0","titleicon":"0","picurl":"https:\/\/www.cppentry.com\/upload_files\/","ispic":"0","yz":"1","yzer":"","yztime":"0","levels":"0","levelstime":"0","keywords":"erlang<\/A> trap_exit<\/A> \u6807\u8bb0<\/A>","jumpurl":"","iframeurl":"","style":"","template":"a:3:{s:4:\"head\";s:0:\"\";s:4:\"foot\";s:0:\"\";s:8:\"bencandy\";s:0:\"\";}","target":"0","ip":"113.108.110.181","lastfid":"0","money":"0","buyuser":"","passwd":"","allowdown":"","allowview":"","editer":"","edittime":"0","begintime":"0","endtime":"0","description":"erlang trap_exit\u6807\u8bb0","lastview":"1711626046","digg_num":"4665","digg_time":"0","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}