|
View:
New views
2 Messages
—
Rating Filter:
Alert me
|
|
|
How to get a supervisor to tell me a child's startfunc?I need to discover the startfunc being used by a variety of processes
started dynamically by a supervisor and I am having a hard time figuring out how to dig this information out of the system. Process A starts a bunch of children for supervisor S over its lifetime, process B needs to do some maintenance or checking of which of these children are running at various points in time, to do this B needs to specifically know the start function that A used when it passed the child spec for any particular child process in to S. This information does not seem to be available directly from the supervisor, so I am guessing that there is some other place I need to look but my various search queries seem to be missing the magic keyword that will not lead me back to the standard supervisor docs... Any hints? Thanks, jim ________________________________________________________________ erlang-questions mailing list. See http://www.erlang.org/faq.html erlang-questions (at) erlang.org |
|
|
Re: How to get a supervisor to tell me a child's startfunc?Jim,
Since this seems to receive little attention and I kind of wanted to know this too, I digged around a bit... I have not tried this out with dynamically created children, but for standard children something along the lines of: supervisor:which_children(SupRef) to get the list of children of a supervisor. The first element of the tuples in the list is the name of the child. sys:get_status(ChildName) will then give you details about the child. Example: 1> application:start(sasl). .... loads of things 2> supervisor:which_children(sasl_safe_sup). [{overload,<0.41.0>,worker,[overload]}, {alarm_handler,<0.40.0>,worker,dynamic}] 3> sys:get_status(overload). {status,<0.41.0>, {module,gen_server}, [[{'$ancestors',[sasl_safe_sup,sasl_sup,<0.37.0>]}, {'$initial_call',{overload,init,1}}], running,<0.39.0>,[], [overload, {state,0,0,0.8,5244,0.1,{0,0},clear}, overload,infinity]]} The '$initial_call' tag seems to provide at least which function was called. But it turns out that calling this on the supervisor is the solution! 11> sys:get_status(sasl_safe_sup). {status,<0.39.0>, {module,gen_server}, [[{'$ancestors',[sasl_sup,<0.37.0>]}, {'$initial_call',{supervisor,sasl,1}}], running,<0.38.0>,[], [sasl_safe_sup, {state,{local,sasl_safe_sup}, one_for_one, [{child,<0.41.0>,overload, {overload,start_link,[]}, permanent,2000,worker, [overload]}, {child,<0.40.0>,alarm_handler, {alarm_handler,start_link,[]}, permanent,2000,worker,dynamic}], {dict,0,16,16,8,80,48,{[],[],[],[],[],...},{{[],[],[],...}}}, 4,3600,[],sasl,safe}, supervisor,infinity]]} Fouth element of the child tagged tuples reveals how he children were started. Sorry about dragging you through the whole investigation, but I think it holds some value... at least as to how I think ;-) Cheers, Torben On Fri, Oct 30, 2009 at 17:45, Jim McCoy <jim.mccoy@...> wrote: > I need to discover the startfunc being used by a variety of processes > started dynamically by a supervisor and I am having a hard time > figuring out how to dig this information out of the system. Process A > starts a bunch of children for supervisor S over its lifetime, process > B needs to do some maintenance or checking of which of these children > are running at various points in time, to do this B needs to > specifically know the start function that A used when it passed the > child spec for any particular child process in to S. This information > does not seem to be available directly from the supervisor, so I am > guessing that there is some other place I need to look but my various > search queries seem to be missing the magic keyword that will not lead > me back to the standard supervisor docs... > > Any hints? > > Thanks, > jim > > ________________________________________________________________ > erlang-questions mailing list. See http://www.erlang.org/faq.html > erlang-questions (at) erlang.org > > -- http://www.linkedin.com/in/torbenhoffmann |
| Free embeddable forum powered by Nabble | Forum Help |