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)
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

