|  | ||||||||
| Linux下多進程編程之fork()函數語法 | ||||||||
| fork()函數語法 表(biao)1列出了fork()函數的語法要(yao)點。 表(biao)1 fork()函數語法要點(dian) 
 fork()函數的簡單(dan)示例程序如下:     int main(void) 將(jiang)可執行(xing)程序下載到目(mu)標板上,運行(xing)結果如下:     $ arm-linux-gcc fork.c –o fork (或者修改Makefile) 從該實(shi)例(li)中(zhong)可以看出,使用fork()函數新建了一個子進(jin)程(cheng)(cheng),其中(zhong)的(de)父進(jin)程(cheng)(cheng)返(fan)回(hui)子進(jin)程(cheng)(cheng)的(de)進(jin)程(cheng)(cheng)號,而子進(jin)程(cheng)(cheng)的(de)返(fan)回(hui)值為0。 由于fork()完整地(di)復(fu)制了父(fu)進(jin)(jin)程(cheng)(cheng)的(de)(de)(de)(de)整個(ge)地(di)址(zhi)空(kong)間,因此執(zhi)行速度是比(bi)較慢的(de)(de)(de)(de)。為了加快fork()的(de)(de)(de)(de)執(zhi)行速度,很多UNIX系統(tong)設計者創(chuang)(chuang)建了vfork()。vfork()也能創(chuang)(chuang)建新(xin)進(jin)(jin)程(cheng)(cheng),但它不產生父(fu)進(jin)(jin)程(cheng)(cheng)的(de)(de)(de)(de)副本。它是通過允許(xu)父(fu)子進(jin)(jin)程(cheng)(cheng)可訪(fang)問(wen)相同(tong)物理內(nei)存(cun),從而偽裝了對進(jin)(jin)程(cheng)(cheng)地(di)址(zhi)空(kong)間的(de)(de)(de)(de)真實(shi)復(fu)制,當(dang)子進(jin)(jin)程(cheng)(cheng)需要改變內(nei)存(cun)中的(de)(de)(de)(de)數(shu)據時(shi)才復(fu)制父(fu)進(jin)(jin)程(cheng)(cheng)。這(zhe)就(jiu)是著名的(de)(de)(de)(de)“寫操作時(shi)復(fu)制”(copy-on-write)技術。現在大(da)部分嵌入(ru)式Linux系統(tong)的(de)(de)(de)(de)fork()函數(shu)調(diao)用(yong)已(yi)經采用(yong)vfork()函數(shu)的(de)(de)(de)(de)實(shi)現方式,例如uClinux所(suo)有的(de)(de)(de)(de)多進(jin)(jin)程(cheng)(cheng)管理都通過vfork()來實(shi)現。 本文選自華清遠見嵌入式培訓教材《從實踐中學嵌入式Linux應用程序開發》 熱點鏈(lian)接: 
         1、Linux下多進程編程之fork()函數說明 |