停止Erlang守护进程

停止Erlang守护进程,erlang,daemon,Erlang,Daemon,除了运行$killall-9beam.smp,当我知道Erlang节点的-sname时,如何通过编程杀死它 如果我不希望心跳监视器重新启动进程,我如何确保对上述问题给出的任何答案也会扼杀心跳 关于将Erlang部署为守护进程,是否有合适的指南?kill和killall使用-9几乎总是错误的 您可以很容易地使用以下命令要求远程节点退出: rpc:call(RemoteNode, init, stop, []). 我不知道这是否会阻止心脏重新启动,但我建议,如果你希望停止它,你不应该在永不停止的模

除了运行
$killall-9beam.smp
,当我知道Erlang节点的
-sname
时,如何通过编程杀死它

如果我不希望心跳监视器重新启动进程,我如何确保对上述问题给出的任何答案也会扼杀心跳


关于将Erlang部署为守护进程,是否有合适的指南?

kill
killall
使用
-9
几乎总是错误的

您可以很容易地使用以下命令要求远程节点退出:

rpc:call(RemoteNode, init, stop, []).
我不知道这是否会阻止心脏重新启动,但我建议,如果你希望停止它,你不应该在永不停止的模式下运行它


Update-Zed指出,
init:stop
heart
做的事情是正确的,因此上面的
rpc:call
是最好的也是唯一的方法。

“init:stop():…如果给出了-heart命令行标志,heart程序将在Erlang节点终止之前终止……”我想我的节点连接不太好。我肯定我忽略了什么。为了测试,我打开了两个终端窗口,在其中一个窗口中运行了
erl-sname-foo
,然后从中获取cookie并运行
erl-sname-bar-setcookie'.'
。在这个窗口中,我运行了
net\u adm:ping()foo@elife)
但它给了我一个“痛”。我在这上面试过一些变种,都是运气不好。知道我做错了什么吗?你为什么在其中一个上做
-setcookie
,而不是在另一个上?如果他们不匹配,你就不能说话。通常,我只在本地节点上使用
~/.erlang.cookie
。我将它们设置为使用相同的cookie,但仍然没有通信。有什么想法吗?可能有很多。不过,你肯定应该让它起作用。不过,这是另一个问题或更多文档。你可以试试
-namesomething@127.0.0.1
这可能会起作用。