SV: how to use supervisor:start_child?

Lennart Öhman Lennart.Ohman@REDACTED
Tue Jan 10 14:18:04 CET 2006

Hi Dietmar,
first it is normally not necessary to register the supervisor
your self in the init function. That is taken care of providing
the supervisor:start_link function with the SupName parameter.
Second, critisism against cryptic error return-values are
many times well in place. Here however I believe the return-value
you experience, invalid_child_spec, to be very accurate.
If you look in the documentation for supervisor:
you will find that ChildSpec shall be a child_spec() and not a list
of child_spec(), as is required in the childrenspecification of a
supervisor init return-value. This from the logical point that you
are not starting an arbritray amount of children but just one.
Good luck and happy hacking,
start_child(SupRef, ChildSpec) -> Result


SupRef = Name | {Name,Node} | {global,Name} | pid()
 Name = Node = atom()
ChildSpec = child_spec() | [term()]
Result = {ok,Child} | {ok,Child,Info} | {error,Error}
 Child = pid() | undefined
 Info = term()
 Error = already_present | {already_started,Child} | term()

Dynamically adds a child specification to the supervisor SupRef which starts the corresponding child process. 

SupRef can be: 

*	the pid, 
*	Name, if the supervisor is locally registered, 
*	{Name,Node}, if the supervisor is locally registered at another node, or 
*	{global,Name}, if the supervisor is globally registered. 

ChildSpec should be a valid child specification (unless the supervisor is a simple_one_for_one supervisor, see below). The child process will be started by using the start function as defined in the child specification. 

Lennart Ohman                   phone   : +46-8-587 623 27
Sjöland & Thyselius Telecom AB  cellular: +46-70-552 6735
Sehlstedtsgatan 6               fax     : +46-8-667 8230
SE-115 28 STOCKHOLM, SWEDEN     email   : lennart.ohman@REDACTED


Från: owner-erlang-questions@REDACTED genom Dietmar Schaefer
Skickat: ti 2006-01-10 12:36
Till: Erlang Questions
Ämne: how to use supervisor:start_child?

Hi !

I can't get this to work !

I have a supervisor:

init([]) ->

    case  whereis(sup) of
    undefined ->                    %% register only once
     register(sup, self());
    _ -> ok

with a few ChildSpec:
    AChild    = {xclock,{xclock,start_link,[]},

    StopChild = {stop_wrp,{stop_wrp,start_link,[]},

    SimpleSup = {dynamic, {dynamic, start_link, []},
        transient, 2000, worker, [dynamic]},

    {ok,{{one_for_one,1,1}, [StopChild]}}.

I I try to start_child

supervisor:start_child(sup,[{dynamic, {dynamic, start_link,
[]},transient, 2000, worker, [dynamic]}]).

I get


How can this be?
( it should be valid because I can use it in the return value of
ok,{{one_for_one,1,1}, [SimpeSup]}}.

Please give me a hint !



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the erlang-questions mailing list