前段時間在看清華大學出版社出版的《Linux教程》(05年6月第一版)。在248頁第十三章《進程》有一節是簡述Linux進程的層次關系的,把操作系統自啟動后都做了什么,說得比較清晰,看過后受益匪淺。
就是喜歡看這種能把整個框架說得比較清楚的文章!特抄來以共享:
當打開Linux系統,LILO(LInux LOader)找到Linux內核把它加載到內存。它初始化各種硬件,包括磁盤控制器。然后轉到保護模式,加載操作系統,執行初始化各種內核數據結構的代碼,例如inode和文件表。此進程的PID為0。它啟動初試進程(init進程,PID為1)完成引導過程的其余工作。init進程啟動守護進程 kflushd、kupdate、kpiod和kswapd,其PID分別為2、3、4、5。Init進程然后初始化文件系統,安裝根文件系統。接下來試著執行/sbin/init程序,在每一個激活的終端上執行minegetty進程(經常被稱為getty進程)。getty進程設置終端屬性,如波特率,這些屬性在/etc/termcap文件中都有定義。它顯示login:提示符,等待用戶登錄。
在login:提示符下,輸入登錄名并按回車鍵,getty進程產生一個子進程。它轉變為以登錄名為參數的登錄進程。登錄進程提示輸入密碼,并檢查輸入名和密碼的有效性。如果兩者均正確,登錄進程產生一個子進程,它將轉變為登錄shell。如果登錄進程沒有在/etc/passwd文件中找到登錄名或者輸入的密碼與/etc/passwd文件中(或者/etc/shadow文件)存放的密碼不匹配,他將顯示錯誤提示信息然后終止??刂茩嘤只氐絞etty進程,重新顯示login:提示符。一旦進入登錄shell,就可以完成自己的工作,還可以按鍵終止當前shell。如果這樣做了,shell進程會終止,控制權又回到getty進程,再次顯示login:提示符,又開始循環。
就是說,當登錄到Linux系統,系統產生第一個進程,稱為登錄進程,它又創建登錄shell。登錄shell為所輸入的命令創建進程,用以解釋/執行命令。
兩個Linux進程貫穿系統生命周期:swapper和init進程。監視終端行的getty進程,只要終端與系統關聯上就會一直存在。登錄進程和登錄shell進程只有在登錄時才存在。所有其它進程生存期較短,只在命令或者程序執行時短暫存在。
ps -ef 命令或者pstree命令可以用圖的形式顯示當前系統中執行進程的進程樹,勾勒出進程間的父子關系。pstree命令顯示的圖比ps -ef命令更簡潔。pstree顯示的結果,前有“+”的是當前的后臺進程,而前面的有“-”的是后續后臺進程。pstree命令使用-h參數,輸出用粗體(加亮)顯示當前進程。使用“-a”選項,pstree顯示帶參數的命令。如“pstree 402 -a”可以顯示PID為402的進程的那個的層次關系。
Bash shell可以使用ulimit顯示用戶可以同時執行的最大進程個數。TC shell下為limit。兩個命令都可以用來顯示硬件和操作系統資源的使用限制。
原文轉自:http://blogread.cn/it/article/1