如何阻止第三方Erlang应用程序

时间:2010-02-21 09:59:53

标签: erlang

我正在编写我的第一个erlang应用程序,我还不了解erlang生态系统的某些部分以及应该如何处理它。例如,如果我的应用程序依赖于其他一些应用程序,那么立即启动并停止的方法是什么?实际上,我已经想出了如何启动,只需将application:start/1调用放在应用程序模块的start/2函数中:

-module(myapp).
-behaviour(application).

-export([start/0, start/2, stop/1]).

start(_Type, _StartArgs) ->
    ok = application:start(ssl),
    ok = application:start(inets),
    ok = application:start(log4erl),
    myapp_sup:start_link().

stop(_State) ->
    ok.

但是当我尝试将相应的application:stop/1调用放入myapp:stop/1函数并从erlang shell application:stop(myapp)调用时,后来只是停止响应任何命令。

3 个答案:

答案 0 :(得分:4)

阅读官方文件:

  在应用程序之后

停止/ 1称为   已停止,应该做任何事情   必要的清理。请注意   实际停止申请,   那是关闭的   监督树,处理   自动按照Starting and Stopping Applications

中的说明

更多信息herethere

通常,当我有一些依赖的应用程序时,我使用.app资源文件,在那里我列出了我的应用程序需要启动(或加载)的所有应用程序才能正常工作。

答案 1 :(得分:3)

我建议您查看erlware.org并使用sinan和faxien工具进行Erlang开发。如果您的应用程序和版本坚持严格的OTP合规性,它不仅使开发更容易,更不容易出错,而且使共享应用程序变得更加容易。即将出版的书http://www.manning.com/logan/回答得更多,你可以阅读pdf格式的早期版本。

在模块中“随机”开始和停止是一个坏主意。

答案 2 :(得分:0)

你已经有了一些很好的建议。让我简单地添加一个您正在看到的问题的解释:应用程序控制器同步调用您的stop回调函数,即,在函数返回之前,应用程序控制器不会执行任何其他操作。但是你要求应用程序控制器停止其他一些应用程序 - 这两个进程陷入僵局,等待彼此。