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