在erlang應用程序的資源文件*.app可以定義分步驟啟動。
*.app中的start_phase字段的值可以指定多個參數分別啟動
start_phase的調用時機是在start之後調用的。
(2)erlang是壹種分布式語言,在啟動應用程序時感覺與C/C++/Java/python都有很大的區別,因為沒有main函數
其實這是壹個已經可以發布的應用程序與非發布式程序的區別。
如果是壹個已經發布的應用程序,安裝後啟動時,還是有main函數的。
類似Java,Java JVM是用C語言開發的,erlang虛擬機也是用C開發的,非發布的應用程序啟動,
諸如:application:start(appName),這是在虛擬機裏啟動的。
erl其實是個shell腳本,在erl腳本中它實際調用的是erlexec,這個程序的入口是erlexec.c。
erlexec的main函數首先解析命令行傳入的參數和環境變量,然後尋找beam可執行文件,
然後就通過execv運行Beam虛擬機,erlexec就是個加載器,在這個過程中就會將命令行參數傳遞給虛擬機中的init進程。
這個時候發現erlang就像是壹個操作系統,linux操作系統中也有init進程。