檢視原始碼 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().
停止(終止)一個節點。