application:start/2
启动一个应用程序
用法:
start(Application, Type) -> ok | {error, Reason}
启动应用程序 Application。如果应用程序没有加载,应用程序控制器首先会使用 application:load/1 函数把它加载。它将会确定所有要包含的应用程序都加载进来。但是不会启动它们。确保应用程序 Application 的代码能够得到保护。
应用程序控制器将会检测应用描述里的键 applications 的值,来确保应用程序运行之前其他所有要包含进来的应用程序都已经启动好了。如果没,将返回 {error,{not_started,App}},App 是缺少没有启动的应用程序。
应用控制器会为应用程序 Application 生成一个主应用程序。那个主应用程序来管理应用程序 Application 里的所有进程。主应用程序通过调用定义在应用描述文件键 mod 里的回调函数 Module:start/2 来启动。
参数 Type 指定应用程序的类型,如果忽略,它的默认值则是 temporary。
如果一个类型是 permanent 的应用程序崩溃,那么它的所有关联应用和整个 Erlang 节点都将关停;如果一个类型是 transient 的应用程序以 normal 原因崩溃,那么它只报告崩溃信息,并不会关停其他跟它关联的应用。如果一个类型是 transient 的应用程序不是以 normal 原因崩溃,那么它的所有关联应用和整个 Erlang 节点都将关停。如果一个类型是 temporary 的应用程序崩溃,它只报告崩溃信息,并不关停其他关联的应用程序。
NOTE:调用 application:stop/1 函数总可以关停一个应用程序,不管它是什么类型的应用程序,不过其他应用程序不会受到影响。
NOTE:类型是 transient 的应用程序很少用到,因为当一个监控树崩溃时,它崩溃原因是 shutdown,而不是 normal。
application:start(genfsm, temporary).