檢視原始碼 系統原則
啟動系統
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_clean
或 start_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 中定義了下列檔案類型
檔案類型 | 檔案名稱/副檔名 | 文件位置 |
---|---|---|
模組 | .erl | Erlang 參考手冊 |
包含檔 | .hrl | Erlang 參考手冊 |
發行資源檔 | .rel | SASL 中的 rel |
應用程式資源檔 | .app | Kernel 中的 app |
啟動腳本 | .script | SASL 中的 script |
二進位啟動腳本 | .boot | - |
設定檔 | .config | Kernel 中的 config |
應用程式升級檔 | .appup | SASL 中的 appup |
發行升級檔 | relup | SASL 中的 relup |
表格:檔案類型