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

       系統容許一個進程建立新進程,新進程即爲子進程,子進程還能夠建立新的子進程,造成進程樹結構模型。整個linux系統的全部進程也是一個樹形結構。樹根 是系統自動構造的,即在內核態下執行的0號進程,它是全部進程的祖先。由0號進程建立1號進程(內核態),1號負責執行內核的部分初始化工做及進行系統配 置,並建立若干個用於高速緩存和虛擬主存管理的內核線程。隨後,1號進程調用execve()運行可執行程序init,並演變成用戶態1號進程,即 init進程。它按照配置文件/etc/initab的要求,完成系統啓動工做,建立編號爲1號、2號...的若干終端註冊進程getty。linux

        每一個getty進程設置其進程組標識號,並監視配置到系統終端的接口線路。當檢測到來自終端的鏈接信號時,getty進程將經過函數execve()執行 註冊程序login,此時用戶就可輸入註冊名和密碼進入登陸過程,若是成功,由login程序再經過函數execv()執行shell,該shell進程 接收getty進程的pid,取代原來的getty進程。再由shell直接或間接地產生其餘進程。shell

 

  上述過程可描述爲:0號進程->1號內核進程->1號用戶進程(init進程)->getty進程->shell進程緩存

   注意,上述過程描述中提到:1號內核進程調用執行init並演變成1號用戶態進程(init進程),這裏前者是init是函數,後者是進程。二者容易混淆,區別以下:函數

   1.init()函數在內核態運行,是內核代碼線程

   2.init進程是內核啓動並運行的第一個用戶進程,運行在用戶態下。接口

   3.一號內核進程調用execve()從文件/etc/inittab中加載可執行程序init並執行,這個過程並無使用調用do_fork(),所以兩個進程都是1號進程。進程

相關文章
相關標籤/搜索