linux 0號進程 1號進程 區別(轉)

來源:互聯網
上載者:User

 系統允許一個進程建立新進程,新進程即為子進程,子進程還可以建立新的子進程,形成進程樹結構模型。整個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號進程。

 轉自:http://blog.csdn.net/yjzl1911/article/details/5613569

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.