系統允許乙個程序建立新程序,新程序即為子程序,子程序還可以建立新的子程序,形成程序樹結構模型。整個linux系統的所有程序也是乙個樹形結構。樹根是系統自動構造的,即在核心態下執行的0號程序,它是所有程序的祖先。由0號程序建立1號程序(核心態),1號負責執行核心的部分初始化工作及進行系統配置,並建立若干個用於快取記憶體和虛擬主存管理的核心執行緒。隨後,1號程序呼叫execve()執行可執行程式init,並演變成使用者態1號程序,即init程序。它按照配置檔案/etc/initab的要求,完成系統啟動工作,建立編號為1號、2號...的若干終端註冊程序getty。
每個getty程序設定其程序組標識號,並監視配置到系統終端的介面線路。當檢測到來自終端的連線訊號時,getty程序將通過函式execve()執行註冊程式login,此時使用者就可輸入註冊名和密碼進入登入過程,如果成功,由login程式再通過函式execv()執行shell,該shell程序接收getty程序的pid,取代原來的getty程序。再由shell直接或間接地產生其他程序。
上述過程可描述為:0號程序->1號核心程序->1號使用者程序(init程序)->getty程序->shell程序
注意,上述過程描述中提到:1號核心程序呼叫執行init並演變成1號使用者態程序(init程序),這裡前者是init是函式,後者是程序。兩者容易混淆,區別如下:
1.init()函式在核心態執行,是核心**
2.init程序是核心啟動並執行的第乙個使用者程序,執行在使用者態下。
3.一號核心程序呼叫execve()從檔案/etc/inittab中載入可執行程式init並執行,這個過程並沒有使用呼叫do_fork(),因此兩個程序都是1號程序。
4.孤兒程序被1號程序領養(ubuntu等os可能不適用)
**:本人根據自己的理解做了一定修改
linux 0號程序 1號程序 區別
系統允許乙個程序建立新程序,新程序即為子程序,子程序還可以建立新的子程序,形成程序樹結構模型。整個linux系統的所有程序也是乙個樹形結構。樹根是系統自動構造的,即在核心態下執行的0號程序,它是所有程序的祖先。由0號程序建立1號程序 核心態 1號負責執行核心的部分初始化工作及進行系統配置,並建立若干...
linux 0號程序 1號程序 區別
系統允許乙個程序建立新程序,新程序即為子程序,子程序還可以建立新的子程序,形成程序樹結構模型。整個linux系統的所有程序也是乙個樹形結構。樹根是系統自動構造的,即在核心態下執行的0號程序,它是所有程序的祖先。由0號程序建立1號程序 核心態 1號負責執行核心的部分初始化工作及進行系統配置,並建立若干...
Linux中的0號程序和1號程序
系統允許乙個程序建立新程序,新程序即為子程序,子程序還可以建立新的子程序,形成程序樹結構模型。整個linux系統的所有程序也是乙個樹形結 構。樹根是系統自動構造的,即在核心態下執行的0號程序,它是所有程序的祖先。由0號程序建立1號程序 核心態 1號負責執行核心的部分初始化工作及進 行系統配置,並建立...