2010-01-25 19 views
5

Oltre a eseguire $ killall -9 beam.smp, come posso eliminare un nodo Erlang al livello di programmazione quando so che è -sname?Stop Erlang Daemon

Se non desidero che il monitor del battito cardiaco riavvii il processo, come posso assicurarmi che qualsiasi risposta fornita per la domanda sopra accolga anche l'heartbeat?

Esiste una guida decente per l'implementazione di Erlang come demone?

risposta

10

kill e killall con è quasi sempre sbagliato.

Si può facilmente chiedere al nodo remoto per uscire utilizzando:

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

non so se che sarebbe impediscono heart riavvio, ma io suggerirei che se ci si aspetta per fermarlo , non dovresti eseguirlo in una modalità non-mai-stop.

Aggiornamento - Zed sottolinea che init:stop fa la cosa giusta con heart, in modo che il sopra rpc:call è il modo migliore e solo per farlo.

+3

"init: stop(): ... Se è stato fornito il flag di riga di comando di -heart, il programma heart viene terminato prima che il nodo di Erlang termini ..." – Zed

+1

Penso che i miei nodi non si connettano. Sono sicuro che sto trascurando qualcosa. Per testare, ho aperto due finestre di Terminale e ho eseguito 'erl -sname foo' in uno, poi ho preso il cookie e ho eseguito' erl -sname bar -setcookie '...' '. In questa finestra, ho eseguito 'net_adm: ping ('foo @ elife')' ma mi ha dato un 'fitta'. Ho provato alcune varianti su questo, tutto senza fortuna. Qualche idea su cosa sto facendo male? – Eli

+0

Perché stai facendo '-setcookie' su uno e non sull'altro? Se non corrispondono, non puoi parlare. In generale, uso '~/.erlang.cookie' sul mio nodo locale. – Dustin