restarting child processes

Chris Campbell <>
Wed Oct 19 23:59:11 CEST 2005


On 19/10/05, Lennart Ohman <> wrote:
> Hi Chris,
> the childprocess (or worker) crashes in its init-phase. You
> can se this by examining the Context field in the supervisor
> report (start_error). The supervisor will then consider itself
> to be a failure and crash in its own initphase.

Ok.  Thanks.

> As a note, your child is actually not a proper OTP process either,
> or to put it in a more polite way :-) one can say that you have
> choose to role-your-own by not using for instance the gen_server
> behaviour.

[snip]

Ok, I rewrote it so it uses gen_server however it never times out.

% swf_kid.erl
-module(swf_kid).
-behaviour(gen_server).

-export([start_link/0, terminate/2]).
-export([init/1, handle_cast/2, handle_info/2, handle_call/3]).

start_link() ->
    io:format("Child starting~n"),
    gen_server:start_link(swf_kid, [{timeout, 750}], []).

init(_A) ->
    process_flag(trap_exit, true),
    {ok, []}.

handle_cast(_A, S) ->
    {noreply, S}.

handle_call(_R, _F, S) ->
    {reply, dont_care, S}.

handle_info(timeout, S) ->
    io:format("Child exiting!~n"),
    {stop, arghh, S}.

terminate(shutdown, _S) ->
    ok.

% swf_supervisor.erl
-module(swf_supervisor).
-behaviour(supervisor).
-export([start_link/0, init/1]).


start_link() ->
    supervisor:start_link(swf_supervisor, []).

init(_X) ->
    {ok, {{one_for_one, 50, 1},
          [{kid, {swf_kid, start_link, []},
            permanent, brutal_kill, worker, [swf_kid]}]}}.



More information about the erlang-questions mailing list