2010-01-25 23 views
5

Además de ejecutar $ killall -9 beam.smp, ¿cómo puedo matar un nodo de Erlang mediante programación cuando sé que es -sname?Detener Erlang Daemon

Si no quiero que el monitor de latidos reanude el proceso, ¿cómo puedo asegurarme de que cualquier respuesta dada para la pregunta anterior también matará los latidos del corazón?

¿Existe una guía decente para implementar Erlang como daemon?

Respuesta

10

kill y killall con es casi siempre está mal.

bastante Puede pedir fácilmente el nodo remoto para salir usando:

rpc:call(RemoteNode, init, stop, []). 

no sé si eso sería evitar que se reinicie heart, pero me gustaría sugerir que si va a detenerlo , no deberías ejecutarlo en un modo que no para nunca.

actualización - Zed señala que init:stop hace lo correcto con heart, lo que lo anterior rpc:call es la mejor y única manera de hacerlo.

+3

"init: stop(): ... Si se proporcionó el distintivo de línea de comando -heart, el programa del corazón finaliza antes de que el nodo Erlang finalice ..." – Zed

+1

Creo que mis nodos no se conectan del todo. Estoy seguro de que estoy pasando por alto algo. Para probar, abrí dos ventanas de Terminal y ejecuté 'erl -sname foo' en uno, luego obtuve la cookie y ejecuté' erl -sname bar -setcookie '...' '. En esta ventana, ejecuté 'net_adm: ping ('foo @ elife')' pero me dio un 'dolor'. He intentado algunas variantes en esto, todo sin suerte. ¿Alguna idea de lo que estoy haciendo mal? – Eli

+0

¿Por qué estás haciendo '-setcookie' en una y no en la otra? Si no coinciden, no puedes hablar. En general, solo uso '~/.erlang.cookie' en mi nodo local. – Dustin