查看源代码 slave (stdlib v6.2)
此模块提供用于启动 Erlang 从属节点的函数。
由主节点启动的所有从属节点会在主节点终止时自动终止。在从属节点产生的所有终端输出都将发送回主节点。文件 I/O 通过主节点完成。
在非当前主机上的从属节点将使用 ssh
程序启动。必须允许用户使用 ssh
连接到远程主机,而无需提示输入密码。可以通过多种方式实现这一点(有关详细信息,请参阅 ssh
文档)。在与主节点相同的主机上启动的从属节点会继承主节点的某些环境变量,例如当前目录和环境变量。有关在另一台主机上启动从属节点时可以假定哪些环境信息,请参阅 ssh
程序的文档。
可以在 erl(1)
的命令行中指定 ssh
程序的替代方案,如下所示
-rsh Program
请注意,使用 -rsh
标志指定的命令被视为可能包含空格的文件名。因此,无法包含任何命令行选项。远程节点将以 "$RSH" "$REMOTE_HOSTNAME" erl -detached -noinput ...
的形式启动,因此必须在远程主机的路径中找到 erl
命令。
从属节点将使用与主节点相同的文件系统。至少,Erlang/OTP 必须安装在两台计算机上的相同位置,并且使用相同版本的 Erlang。
在 Windows 上运行的节点只能在其运行的主机上启动从属节点。
主节点必须处于活动状态。
摘要
函数
调用 pseudo(Master, ServerList)
。 如果您想从命令行启动节点并设置多个伪服务器,则可以按如下方式启动 Erlang 运行时系统
启动多个伪服务器。伪服务器是一个具有注册名称的服务器,它除了将所有消息传递给在主节点执行的真实服务器之外,什么也不做。伪服务器是一个中间人,它只具有与真实服务器相同的注册名称。
运行一个伪服务器。此函数永远不会返回任何值,执行该函数的进程会接收消息。所有收到的消息都只是传递给 Pid
。
等效于 start(Host, Name)
,其中 Name
与执行此调用的节点相同。
在主机 Host
上启动一个从属节点。主机名不必指定为完全限定的名称;也可以使用短名称。这与分布式 Erlang 节点的名称的条件相同。
等效于 start_link/3
。
等效于 start_link/3
。
以与 start/1,2,3
相同的方式启动从属节点,但从属节点会链接到当前正在执行的进程。如果该进程终止,则从属节点也会终止。
停止(杀死)一个节点。
函数
调用 pseudo(Master, ServerList)
。 如果您想从命令行启动节点并设置多个伪服务器,则可以按如下方式启动 Erlang 运行时系统
% erl -name abc -s slave pseudo klacke@super x --
启动多个伪服务器。伪服务器是一个具有注册名称的服务器,它除了将所有消息传递给在主节点执行的真实服务器之外,什么也不做。伪服务器是一个中间人,它只具有与真实服务器相同的注册名称。
例如,如果您已启动一个从属节点 N
,并想在此节点上执行 pxw
图形代码,则可以在从属节点上将服务器 pxw_server
作为伪服务器启动。 如下所示:
rpc:call(N, slave, pseudo, [node(), [pxw_server]]).
运行一个伪服务器。此函数永远不会返回任何值,执行该函数的进程会接收消息。所有收到的消息都只是传递给 Pid
。
-spec start(Host) -> {ok, Node} | {error, Reason} when Host :: inet:hostname(), Node :: node(), Reason :: timeout | no_rsh | {already_running, Node}.
等效于 start(Host, Name)
,其中 Name
与执行此调用的节点相同。
-spec start(Host, Name) -> {ok, Node} | {error, Reason} when Host :: inet:hostname(), Name :: atom() | string(), Node :: node(), Reason :: timeout | no_rsh | {already_running, Node}.
-spec start(Host, Name, Args) -> {ok, Node} | {error, Reason} when Host :: inet:hostname(), Name :: atom() | string(), Args :: string(), Node :: node(), Reason :: timeout | no_rsh | {already_running, Node}.
在主机 Host
上启动一个从属节点。主机名不必指定为完全限定的名称;也可以使用短名称。这与分布式 Erlang 节点的名称的条件相同。
启动的节点的名称变为 Name@Host
。
从属节点会重置其 io:user/0
进程,以便在从属节点上产生的所有终端 I/O 自动中继到主节点。此外,文件服务器也会中继到主节点。
参数 Args
用于设置 erl
命令行参数。 它会传递给新节点,可用于各种用途;请参阅 erl(1)
。
例如,假设您想在主机 H
上启动一个从属节点,其节点名称为 Name@H
,并希望该从属节点具有以下属性:
- 目录
Dir
将添加到代码路径。 - Mnesia 目录将设置为
M
。 - Unix
DISPLAY
环境变量将设置为主节点的显示。
执行以下代码来实现此目的
E = " -env DISPLAY " ++ net_adm:localhost() ++ ":0 ",
Arg = "-mnesia_dir " ++ M ++ " -pa " ++ Dir ++ E,
slave:start(H, Name, Arg).
该函数返回 {ok, Node}
,其中 Node
是新节点的名称;否则返回 {error, Reason}
,其中 Reason
可以是以下之一
timeout
- 主节点无法与从属节点建立联系。这可能发生在多种情况下- 远程主机上未安装 Erlang/OTP。
- 另一个主机上的文件系统与主机的结构不同。
- Erlang 节点具有不同的 Cookie。
no_rsh
- 计算机上未找到远程 shell 程序。请注意,默认情况下使用ssh
,但可以使用-rsh
标志覆盖此默认设置。{already_running, Node}
- 已经存在一个名为Name@Host
的节点。
-spec start_link(Host) -> {ok, Node} | {error, Reason} when Host :: inet:hostname(), Node :: node(), Reason :: timeout | no_rsh | {already_running, Node}.
等效于 start_link/3
。
-spec start_link(Host, Name) -> {ok, Node} | {error, Reason} when Host :: inet:hostname(), Name :: atom() | string(), Node :: node(), Reason :: timeout | no_rsh | {already_running, Node}.
等效于 start_link/3
。
-spec start_link(Host, Name, Args) -> {ok, Node} | {error, Reason} when Host :: inet:hostname(), Name :: atom() | string(), Args :: string(), Node :: node(), Reason :: timeout | no_rsh | {already_running, Node}.
以与 start/1,2,3
相同的方式启动从属节点,但从属节点会链接到当前正在执行的进程。如果该进程终止,则从属节点也会终止。
有关参数和返回值的说明,请参阅 start/1,2,3
。
-spec stop(Node) -> ok when Node :: node().
停止(杀死)一个节点。