檢視原始碼 系統原則

啟動系統

Erlang 執行期系統使用命令 erl 啟動

% erl
Erlang/OTP 27 [erts-15.0] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [jit]

Eshell V15.0 (press Ctrl+G to abort, type help(). for help)
1>

erl 可接收多個命令列參數;請參閱 ERTS 應用程式中的 erl。本章也會說明部分參數。

應用程式可以透過呼叫下列函數之一來存取命令列參數的值

重新啟動與停止系統

執行期系統可透過呼叫 halt/0,1,2 來停止。

模組 init 包含重新啟動、重新開機及停止執行期系統的函數

若 Erlang Shell 終止,執行期系統也會終止。

啟動腳本

執行期系統是使用啟動腳本啟動。啟動腳本包含關於要載入哪些程式碼,以及要啟動哪些程序和應用程式的指令。

啟動腳本檔案的副檔名為 .script。執行期系統使用腳本的二進位版本。這個二進位啟動腳本檔案的副檔名為 .boot

要使用哪個啟動腳本是透過命令列旗標 -boot 指定。副檔名 .boot 應省略。例如,使用啟動腳本 start_all.boot

% erl -boot start_all

若未指定啟動腳本,則預設為 ROOT/bin/start,其中 ROOT 是 Erlang/OTP 的安裝目錄。請參閱預設啟動腳本

當使用命令列旗標 -init_debug 時,init 程序會在解譯啟動腳本時輸出偵錯資訊。

% erl -init_debug
{progress,preloaded}
{progress,kernel_load_completed}
{progress,modules_loaded}
{start,heart}
{start,logger}
  .
  .
  .

如需啟動腳本語法和內容的詳細說明,請參閱 SASL 應用程式中的 script

預設啟動腳本

Erlang/OTP 隨附以下啟動腳本

  • start_clean.boot - 載入 Kernel 和 STDLIB 應用程式的程式碼並啟動它們。
  • start_sasl.boot - 載入 Kernel、STDLIB 和 SASL 應用程式的程式碼並啟動它們。
  • no_dot_erlang.boot - 載入 Kernel 和 STDLIB 應用程式的程式碼並啟動它們。略過載入檔案 .erlang。適用於無論使用者偏好如何,行為都相同的腳本和其他工具。

要使用 start_cleanstart_sasl 作為預設值,是由使用者在使用 Install 安裝 Erlang/OTP 時決定。會詢問使用者

Do you want to use a minimal system startup instead of the SASL startup?

如果答案為是,則使用 start_clean,否則使用 start_sasl。所選的啟動腳本會被複製並重新命名為 start.boot,然後放置在目錄 ROOT/bin 中。

使用者定義的啟動腳本

有時建立使用者定義的啟動腳本會很有用或有其必要性。在嵌入式模式下執行 Erlang 時尤其如此;請參閱程式碼載入策略

雖然可以手動建立啟動腳本,但最好使用函數 systools:make_script/1,2 從名為 Name.rel 的發行資源檔產生啟動腳本。這需要原始碼依據 OTP 設計原則建構成應用程式。

如需關於 .rel 檔案的更多資訊,請參閱OTP 設計原則和 SASL 中的 rel 頁面。

要產生二進位啟動腳本檔案 Name.boot,啟動腳本檔案 Name.script,請使用函數 systools:script2boot(File)

程式碼載入策略

執行期系統可以在嵌入式互動式模式下啟動。選擇哪一種模式是由命令列旗標 -mode 決定

% erl -mode embedded

預設模式為 interactive。如果給定多個 -mode 旗標,則會使用第一個旗標。

模式屬性如下

  • 在嵌入式模式下,所有程式碼會在系統啟動期間根據啟動腳本載入。(程式碼稍後可以透過明確命令程式碼伺服器載入。)

  • 在互動式模式下,程式碼會在首次需要時動態載入,這表示當嘗試呼叫未載入模組中的函數時,程式碼伺服器會搜尋程式碼路徑,並將模組載入系統。

最初,程式碼路徑包含目前的工作目錄和 ROOT/lib 下的所有物件程式碼目錄,其中 ROOT 是 Erlang/OTP 的安裝目錄。目錄可以命名為 Name[-Vsn],其中 -Vsn 後綴是可選的。預設情況下,程式碼伺服器會在具有相同 Name 的目錄中選擇版本號最高的目錄。如果 Name[-Vsn] 目錄下存在 ebin 目錄,則會將該目錄新增至程式碼路徑。

程式碼路徑可以透過使用命令列旗標 -pa Directories-pz Directories 延伸。這些分別將 Directories 新增至程式碼路徑的開頭或結尾。範例

% erl -pa /home/arne/mycode

code 模組包含多個用於修改和查詢搜尋路徑的函數。

檔案類型

在 Erlang/OTP 中定義了下列檔案類型

檔案類型檔案名稱/副檔名文件位置
模組.erlErlang 參考手冊
包含檔.hrlErlang 參考手冊
發行資源檔.relSASL 中的 rel
應用程式資源檔.appKernel 中的 app
啟動腳本.scriptSASL 中的 script
二進位啟動腳本.boot-
設定檔.configKernel 中的 config
應用程式升級檔.appupSASL 中的 appup
發行升級檔relupSASL 中的 relup

表格:檔案類型