supervisor start_child 注意
一.有一个supervisor Module:
-behaviour(supervisor).
%% API
-compile(export_all).
%% Supervisor callbacks
-export([init/1]).
-define(SERVER, ?MODULE).
start_link() ->
supervisor:start_link({local, ?SERVER}, ?MODULE, []).
%% 启动子节点方法,到本supervisor下
%% Mod:要启动的模块, Args:启动参数
%% 返回值:ok
start_child_worker(Mod, Args) ->
{ok, Pid} = supervisor:start_child(?MODULE,
{Mod, {Mod, start_link, Args},
transient, 8000, worker, [Mod]}),
{ok, Pid}.
%% 启动子节点方法,到本supervisor下
%% Mod:要启动的模块, Args:启动参数
%% 返回值:ok
start_child_sup(Mod, Args) ->
{ok, Pid} = supervisor:start_child(?MODULE,
{Mod, {Mod, start_link, Args},
transient, infinity, supervisor, [Mod]}),
{ok, Pid}.
init([]) ->
RestartStrategy = one_for_one,
MaxRestarts = 1000,
MaxSecondsBetweenRestarts = 3600,
SupFlags = {RestartStrategy, MaxRestarts, MaxSecondsBetweenRestarts},
{ok, {SupFlags, []}}.
二.在启动模块中写如下方法
{ok, Pid1} = e_test_sup_root:start_child_worker(e_test_server1, []),
{ok, Pid2} = e_test_sup_root:start_child_worker(e_test_server2, [])
这样是正常的
三.如果第二句放到e_test_server1的init方法中去,
相当于第一次调用还没有返回的基础上又执行第二次调用,
虽然不会导致cpu飙高,但是实际上产生了真正的死循环,init方法不会返回
posted on 2012-08-16 16:02 fangjie008 阅读(598) 评论(0) 编辑 收藏 举报