2010-01-25 209 views
5

除了运行$ killall -9 beam.smp,当我知道它的-sname时,如何以编程方式终止Erlang节点?停止Erlang守护进程

如果我不想让心跳监视器重新启动过程,我如何确保对上述问题给出的任何答案也会消除心跳?

是否有一个体面的指南来部署Erlang作为守护进程?

回答

10

kill and killall with is 几乎总是错的

你可以很容易地让远程节点使用退出:

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

我不知道这是否会阻止heart从重新启动它,但我建议,如果你希望停止,你不应该以永不停止的模式运行它。

更新 - 捷思锐指出:init:stop做正确的事与heart,因此上述rpc:call是做到这一点的最佳和唯一途径。 “

+3

”init:stop():...如果给出了-heart命令行标志,那么心脏程序在Erlang节点终止之前终止......“ – Zed 2010-01-25 07:41:36

+1

我认为我的节点没有完全连接。我确定我忽略了一些东西。为了测试,我打开了两个终端窗口并在其中运行了'erl -sname foo',然后从中获取了cookie并运行了'erl -sname bar -setcookie'...''。在这个窗口中,我运行了'net_adm:ping('foo @ elife')',但它给了我一个'庞'。我已经尝试过一些变种,都没有运气。任何想法我做错了什么? – Eli 2010-01-25 16:07:02

+0

你为什么要在一个而不是另一个上执行'-setcookie'?如果它们不匹配,你就不能说话。通常,我只在我的本地节点上使用'〜/ .erlang.cookie'。 – Dustin 2010-01-25 18:14:52