Erlang监控事件管理器进程

来源:互联网 发布:js调用angularjs方法 编辑:程序博客网 时间:2024/06/14 17:16

 转载请注明,来自:http://blog.csdn.net/skyman_2001
 gen_event:start_link()可以产生一个事件管理器进程(an event manager),可以加到监控树里接受监控,这时Supervisor 的Child Specification中的Modules必须是dynamic

下面看一个简单的例子:

 logger_sup.erl:

-module(logger_sup).-behaviour(supervisor).-export([start_link/0 ,init/1]).start_link() ->supervisor:start_link({local, ?MODULE}, ?MODULE, []).init(_) ->{ok, {{one_for_one, 10, 10}, [{log_mgr, {logger, start_link, []}, permanent, 1000, worker, dynamic}]}}.


logger.erl:

-module(logger).   -behaviour(gen_event).     -export([start_link/0]).     %% gen_event callbacks   -export([init/1, handle_event/2, handle_call/2, terminate/2]).       start_link() ->      case gen_event:start_link({local, log_mgr}) of           Result = {ok, _Pid} ->               gen_event:add_handler(log_mgr, ?MODULE, [abc]),               Result;           Other ->               Other       end. init(Args) ->    io:format("logger handler init: ~p~n", [Args]),       {ok, Args}.... ...

 

编译,运行:
1> logger_sup:start_link().

logger handler init: [abc]

{ok,<0.32.0>}

2> exit(whereis(log_mgr), kill).

logger handler init: [abc]