![]() |
|
Linux下進程的創建、執行和終止 |
|
|
1)進程的創建和執行 許多操作系統提供的都是產生進程的機制,也就是說,首先在新的地址空間里創建進程、讀入可執行文件,后再開始執行。Linux中進程的創建很特別,它把上述步驟分解到兩個單獨的函數中去執行:fork()和exec函數族。首先,fork()函數通過復制當前進程創建一個子進程,子進程與父進程的區別僅僅在于不同的PID、PPID和某些資源及統計量。exec函數族負責讀取可執行文件并將其載入地址空間開始運行。 要注意的是,Linux中的fork()函數使用的是寫時復制頁的技術,也就是內核在創建進程時,其資源并沒有被復制過來,資源的賦值僅僅只有在需要寫入數據時才發生,在此之前只是以只讀的方式共享數據。寫時復制技術可以使Linux擁有快速執行的能力,因此這個優化是非常重要的。 2)進程的終止 進程終結也需要做很多煩瑣的收尾工作,系統必須保證回收進程所占用的資源,并通知父進程。Linux首先把終止的進程設置為僵尸狀態,這時,進程無法投入運行,它的存在只為父進程提供信息,申請死亡。父進程得到信息后,開始調用wait函數族,后終止子進程,子進程占用的所有資源被全部釋放。 本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》 熱點鏈接:
1、Linux下的進程結構 |