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 条评论。