【问题标题】:Stop Erlang Daemon停止 Erlang 守护进程
【发布时间】:2010-01-26 02:12:48
【问题描述】:

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

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

是否有关于将 Erlang 部署为守护进程的体面指南?

【问题讨论】:

    标签: erlang daemon


    【解决方案1】:

    killkillall-9几乎总是错误的

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

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

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

    更新 - Zed 指出init:stopheart 做了正确的事情,所以上面的rpc:call 是最好的也是唯一的方法。

    【讨论】:

    • "init:stop(): ...如果给出-heart命令行标志,heart程序在Erlang节点终止之前终止。..."
    • 我认为我的节点没有完全连接。我确定我忽略了一些东西。为了测试,我打开了两个终端窗口并在一个窗口中运行erl -sname foo,然后从中获取cookie 并运行erl -sname bar -setcookie '...'。在这个窗口中,我运行了net_adm:ping('foo@elife'),但它给了我一个“痛苦”。我已经尝试了一些变体,但都没有运气。知道我做错了什么吗?
    • 你为什么在一个而不是另一个上做-setcookie?如果他们不匹配,你就不能说话。一般来说,我只是在本地节点上使用~/.erlang.cookie
    • 我将它们设置为使用相同的 cookie,但仍然没有通信。有什么想法吗?
    • 可能是很多事情。不过,您绝对应该可以正常工作。不过,这是另一个问题或更多文档。你可以试试-name something@127.0.0.1,它应该可以工作。