Pregunta

He implementado un gen_server y el supervisor: test_server y test_sup. Quiero probar ellos de la cáscara / CLI. He escrito sus funciones start_link tal manera que sus nombres están registrados localmente.

he descubierto que puedo generar el test_server desde la línea de comandos muy bien, pero un test_sup generado no me permite interactuar con el servidor en absoluto.

Por ejemplo, puede generar un test_server ejecutando:

1> spawn(test_server, start_link, []).
<0.39.0>
2> registered().
[...,test_server,...]

Me puede interactuar con el servidor, y todo parece estar bien.

Sin embargo, si trato de hacer lo mismo con test_sup, no hay nuevos nombres / PIDS se registran en mi "proceso de línea de comandos" (usando registered/0). Mi test_server parece que se ha generado, pero no pueden interactuar con él (ver el comentario de Lukas Larsson sobre SASL para ver por qué esto es cierto).

Me asumir codifiqué un error en mi supervisor, pero este método de empezar mi supervisor funciona perfectamente bien:

1> {ok, Pid}= test_sup:start_link([]).
{ok, <0.39.0>}
2> unlink(Pid).
true
3> registered().
[...,test_server,test_sup,...]

¿Por qué es que puedo generar un gen_server pero no un supervisor?


Actualizar

El código que estoy usando se puede encontrar en este post . Estoy usando echo_server y echo_sup, dos módulos muy sencillos.

Dado que el código, esto funciona:

spawn(echo_server, start_link, []).

Y esto no:

spawn(echo_sup, start_link, []).

Otros consejos

Siempre que tratar de entender estas cosas por lo general es muy útil para encender SASL.

aplicación:. Partida (SASL)

De esa manera que se espera que llegar a saber por qué el supervisor está terminando.

scroll top