I've implemented a gen_server and supervisor: test_server
and test_sup
. I want to test them from the shell/CLI. I've written their start_link
functions such that their names are registered locally.
I've found that I can spawn the test_server
from the command line just fine, but a spawned test_sup
does not allow me to interact with the server at all.
For example, I can spawn a test_server
by executing:
1> spawn(test_server, start_link, []).
<0.39.0>
2> registered().
[...,test_server,...]
I can interact with the server, and everything appears fine.
However, if I try to do the same thing with test_sup
, no new names/Pids are registered in my "CLI process" (using registered/0
). My test_server
appears to have been spawned, but I cannot interact with it (see Lukas Larsson's comment about SASL to see why this is true).
I'd assume I coded an error in my supervisor, but this method of starting my supervisor works perfectly fine:
1> {ok, Pid}= test_sup:start_link([]).
{ok, <0.39.0>}
2> unlink(Pid).
true
3> registered().
[...,test_server,test_sup,...]
Why is it that I can spawn a gen_server but not a supervisor?
Update
The code I'm using can be found in this post. I'm using echo_server
and echo_sup
, two very simple modules.
Given that code, this works:
spawn(echo_server, start_link, []).
and this does not:
spawn(echo_sup, start_link, []).
This explanation was given by Bernard Duggan on the Erlang questions mailing list:
Whenever trying to figure these things out it is usually very helpful to switch on SASL.
application:start(sasl).
That way you will hopefully get to know why you supervisor is terminating.