非常教程

Erlang 20参考手册

ERTS/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过程的当前状态可以被检查。在系统启动(初始化)期间,InternalStatusstarting,并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

可以设置为strictrelaxed。它控制着如何解释代码路径中的每个目录:

  • 严格来说,它出现在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)

ERTS/init相关

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1