[erlang-questions] OTP Supervisor Question

Chandru chandrashekhar.mullaparthi@REDACTED
Mon Jan 4 04:12:40 CET 2010

2010/1/4 Jayson Vantuyl <kagato@REDACTED>

> If I'm an OTP-style process (say, a gen_server), and I want to know who my
> parent is (say, a supervisor), is this possible using any API, or do I need
> to pass in the Parent explicitly?  Is using supervisor:get_child a good way
> to find a process's sibling?  Would it be better to start a single
> gen_server and have it use normal, linked processes?

I think using supervisor:which_children(Sup_ref)  is quite reasonable. But
for this, you'll have to store the process id of the supervisor in all the
supervised processes.

> I have a certain automaton that is represented as a group of three
> processes.  These processes coordinate and there may be multiple automata on
> a single node.  I want to put them under a single supervisor, but I'm
> struggling a bit to get them to all know each other's PIds without adding
> code to the supervisor (which is bad, right?) and without having to locally
> register them (which would prevent multiple automata per node).

As far as I understand, you'll need a two level supervision tree. One
supervisor supervising each set of three processes, and those supervisors in
turn under a top level supervisor. That way, when any of a set of three
processes invoke supervisor:which_children(Sup_ref) on its supervisor, it'll
only see that set and nothing else.


More information about the erlang-questions mailing list