init
init
模块
init
模块摘要
系统启动的协调。
描述
该模块已预加载,并包含用于init
协调系统启动的系统进程的代码。在启动时评估的第一个函数是boot(BootArgs)
,其中BootArgs
是从本地操作系统提供给Erlang运行时系统的命令行参数列表; 见erl(1)
。
init
读取启动脚本,其中包含有关如何启动系统的说明。有关启动脚本的更多信息,请参阅script(4)
。
init
还包含重新启动、重新启动和停止系统的函数。
输出
boot(BootArgs) - > no_return()
类型
启动Erlang运行时系统。此函数在模拟器启动并协调系统启动时调用。
BootArgs
除模拟器标志外,都是命令行参数,即标志和简单参数; 见erl(1)
。
init
解释一些标志,参见Command-Line Flags
下面的部分。其余的标志(“用户标志”)和简单参数被传递给init
循环,并且可以分别通过调用get_arguments/0
和获取get_plain_arguments/0
。
get_argument(Flag) -> {ok, Arg} | error
类型
返回与命令行用户标志关联的所有值Flag
。如果Flag
提供了多次,每个Values
都按照保存的顺序返回。例:
% erl -a b c -a d
...
1> init:get_argument(a).
{ok,[["b","c"],["d"]]}
以下标志是自动定义的,可以使用此函数检索:
root
Erlang/OTP的安装目录,$ROOT
*
2> init:get_argument(root).
{ok,[["/usr/local/otp/releases/otp_beam_solaris8_r10b_patched"]]}
progname
启动Erlang程序的名称:
3> init:get_argument(progname).
{ok,[["erl"]]}
home
主目录:
4> init:get_argument(home).
{ok,[["/home/harry"]]}
error
如果没有值关联,则返回Flag
。
get_arguments() -> Flags
类型
返回所有命令行标志和系统定义的标志,请参阅get_argument/1
。
get_plain_arguments() -> Arg
类型
以字符串列表的形式返回任何简单的命令行参数(可能为空)。
弄到[医]状态%28%29->{InternalStatus,ProvidStatus}
类型
该init
过程的当前状态可以被检查。在系统启动(初始化)期间,InternalStatus
是starting
,并ProvidedStatus
指示启动脚本已被解释多远。{progress, Info}
在引导脚本中解释的每个术语都会影响ProvidedStatus
,即ProvidedStatus
获取值Info
。
reboot() -> ok
所有应用程序顺利取下,所有代码都被卸载,所有端口在系统终止前都关闭。如果-heart
指定了命令行标志,heart
程序将尝试重新启动系统。有关更多信息,请参阅heart(3)
。
为了限制关机时间,init
允许花费时间取消应用程序,命令行标志-shutdown_time
将被使用。
restart() -> ok
系统在正在运行的Erlang节点内
重新启动,这意味着模拟器不会重新启动。所有应用程序都顺利取下,所有代码都被卸载,并且在系统以与最初启动相同的方式重新启动之前,所有端口均已关闭。这同样BootArgs
被再次使用。
为了限制关机时间,init
允许花费时间取消应用程序,命令行标志-shutdown_time
将被使用。
script_id() -> Id
类型
获取用于引导系统的引导脚本的标识。Id
可以是任何Erlang术语。在交付的引导脚本中,Id
是{Name, Vsn}
。Name
并且Vsn
是字符串。
stop() -> ok
和stop(0)
.一样。
stop(Status) -> ok
类型
所有应用程序均顺利取下,所有代码均已卸载,并且在系统通过调用终止之前所有端口均已关闭halt(Status)
。如果-heart
指定了命令行标志,则heart
程序在Erlang节点终止之前终止。有关更多信息,请参阅heart(3)
。
为了限制关机时间,init
允许花费时间取消应用程序,命令行标志-shutdown_time
将被使用。
命令行标志
警告
从存档文件加载代码的支持是实验性的。在准备就绪之前释放它的唯一目的是获得早期反馈。文件格式,语义,接口等可在未来版本中更改。该-code_path_choice
标志也是实验。
init
模块解释以下命令行标志:
--
--
跟在下一个标志之后的所有东西都被认为是简单的参数,可以使用get_plain_arguments/0
。
-code_path_choice Choice
可以设置为strict
或relaxed
。它控制着如何解释代码路径中的每个目录:
- 严格来说,它出现在
boot script
,或
init
如果可以从常规目录中选择的话,就应该放松一些,并尝试找到一个合适的目录。ebin
目录和ebin
存档文件中的目录。
这个标志特别有用,当你想详细说明从存档加载代码而不编辑boot script
。有关启动脚本解释的更多信息,请参阅script(4)
。该标志对代码服务器的工作方式也有类似的影响; 见code(3)
。
-epmd_module Module
指定用于注册和查找节点名称的模块。默认为erl_epmd
。
-eval Expr
Expr
在系统初始化期间扫描,分析和评估任意表达式。如果其中任何步骤失败(语法错误,解析错误或评估期间的异常),Erlang会停止并显示错误消息。在以下示例中,Erlang用作十六进制计算器:
% erl -noshell -eval 'R = 16#1F+16#A0, io:format("~.16B~n", [R])' \\
-s erlang halt
BF
如果-eval
指定了多个表达式,则会按照指定的顺序依次评估它们。-eval
表达式依次评估-s
和-run
函数调用(这也以指定的顺序)。和-s
和一样-run
,不终止的评估会阻止系统初始化过程。
-extra
以下所有内容都-extra
被认为是简单的参数,可以使用检索get_plain_arguments/0
。
-run Mod [Func [Arg1, Arg2, ...]]
在系统初始化期间评估指定的函数调用。Func
默认为start
。如果没有提供任何参数,则假定该函数的参数为0.否则,它被假定[Arg1,Arg2,...]
为参数1,以列表作为参数。所有参数都以字符串形式传递。如果发生异常,Erlang会停止并显示错误消息。
例子:
% erl -run foo -run foo bar -run foo bar baz 1 2
这将启动Erlang运行时系统并评估以下功能:
foo:start()
foo:bar()
foo:bar(["baz", "1", "2"]).
这些功能在初始化过程中按顺序执行,然后正常终止并将控制传递给用户。这意味着一个-run
不返回的呼叫会阻止进一步处理; 为了避免这种情况,spawn
在这种情况下使用一些变体。
-s Mod [Func [Arg1, Arg2, ...]]
在系统初始化期间评估指定的函数调用。Func
默认为start
。如果没有提供任何参数,则假定该函数的参数为0.否则,它被假定[Arg1,Arg2,...]
为参数1,以列表作为参数。所有参数都以原子形式传递。如果发生异常,Erlang会停止并显示错误消息。
例子:
% erl -s foo -s foo bar -s foo bar baz 1 2
这将启动Erlang运行时系统并评估以下功能:
foo:start()
foo:bar()
foo:bar([baz, '1', '2']).
这些函数在初始化过程中依次执行,然后正常终止并将控制传递给用户。这意味着-s
不返回块进一步处理的调用;要避免这种情况,请使用spawn
在这种情况下。
由于原子的长度有限,建议改用它-run
。
例
% erl -- a b -children thomas claire -ages 7 3 -- x y
...
1> init:get_plain_arguments().
["a","b","x","y"]
2> init:get_argument(children).
{ok,[["thomas","claire"]]}
3> init:get_argument(ages).
{ok, [["7","3"]]}
4> init:get_argument(silly).
error
另见
erl_prim_loader(3)
,,,heart(3)