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