1、创建目录结构 doc、ebin、include、priv、src
2、在ebin下创建应用描述文件,这里应用取名为 first_app,则创建的描述文件为first_app.app
{application, first_app,
[{description, "hello world,first app"},
{id, "first_app"},
{vsn, "0.1.0"},
{modules, [
first_app,
first_app_sup
]},
{registered, "first_app_sup"},
{applications, [kernel,stdlib]},
{mod, {first_app,[]}},
{start_phases, []}
]
}.
3、下面编写 src/first_app.erl,此文件的唯一任务就是启动根监督者。
-module(first_app).
-behaviour(application).
-export([start/2,stop/1]).
start(_StartType,_StartArgs)->
case first_app_sup:start_link() of
{ok,Pid} -> {ok,Pid};
Other -> {error,Other}
end.
stop(_State)->
ok.
4、实现监督者 src/first_app_sup.erl
-module(first_app_sup).
-behaviour(supervisor).
-export([start_link/0,start_child/2]).
-export([init/1]).
-define(SERVER,?MODULE).
start_link()->
supervisor:start_link({local,?SERVER},?MODULE,[]).
start_child(Value,LeaseTime)->
supervisor:start_child(?SERVER,[Value,LeaseTime]).
init([])->
Element={
first_app_tcp_listener,
{first_app_tcp_listener,start_link,[]},
permanent,10000,worker,
[first_app_tcp_listener]
},
Children=[Element],
RestartStrategy={simple_one_for_one,0,1},
{ok,{RestartStrategy,Children}}.
5、尝试运行:
先编译为beam
erlc -o ebin src/*.erl
再运行。
在erl中输入
application:start(first_app).
注意:simple_one_for_one需要手动去调用start_child才会产生子进程。
0 条评论。