您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“Linux的fork函數(shù)使用實(shí)例分析”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“Linux的fork函數(shù)使用實(shí)例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。
一個(gè)進(jìn)程,包括代碼、數(shù)據(jù)和分配給進(jìn)程的資源。fork()函數(shù)通過系統(tǒng)調(diào)用創(chuàng)建一個(gè)與原來進(jìn)程幾乎完全相同的進(jìn)程,也就是兩個(gè)進(jìn)程可以做完全相同的事,但如果初始參數(shù)或者傳入的變量不同,兩個(gè)進(jìn)程也可以做不同的事。
一個(gè)進(jìn)程調(diào)用fork()函數(shù)后,系統(tǒng)先給新的進(jìn)程分配資源,例如存儲(chǔ)數(shù)據(jù)和代碼的空間。然后把原來的進(jìn)程的所有值都復(fù)制到新的新進(jìn)程中,只有少數(shù)值與原來的進(jìn)程的值不同。相當(dāng)于克隆了一個(gè)自己。
/************************************************************************* > File Name: fork_test.c > Author: > Mail: > Created Time: 2016年06月06日 星期一 09時(shí)29分05秒 ************************************************************************/#include #include int main () { pid_t fpid; //fpid表示fork函數(shù)返回的值 int count=0; fpid=fork(); if (fpid printf("error in fork!"); else if (fpid == 0) { printf("child process| process id= %d | fpid= %d |parentid = %d \n",getpid(),fpid,getppid()); count++; } else { printf("parent process| process id= %d | fpid = %d |parentid = %d\n",getpid(),fpid,getppid()); count++; } printf("統(tǒng)計(jì)結(jié)果是: %d \n",count); getchar(); return 0; } 123456789101112131415161718192021222324252627
?
fork出錯(cuò)可能有兩種原因: 1)當(dāng)前的進(jìn)程數(shù)已經(jīng)達(dá)到了系統(tǒng)規(guī)定的上限,這時(shí)errno的值被設(shè)置為EAGAIN。 2)系統(tǒng)內(nèi)存不足,這時(shí)errno的值被設(shè)置為ENOMEM。
二、fork進(jìn)階知識(shí)
?
實(shí)例
#include #include int main(void) { int i=0; printf("i son/pa ppid pid fpid \n"); //ppid指當(dāng)前進(jìn)程的父進(jìn)程pid //pid指當(dāng)前進(jìn)程的pid, //fpid指fork返回給當(dāng)前進(jìn)程的值 for(i=0;iif(fpid==0) printf("i=%d | child ppid=%4d |pid=%4d |fpid=%4d \n",i,getppid(),getpid(),fpid); else printf("i=%d | parent ppid=%4d |pid=%4d |fpid=%4d \n",i,getppid(),getpid(),fpid); } getchar(); return 0; } 1234567891011121314151617181920
?
運(yùn)行結(jié)果
?
查看進(jìn)程
?
分析
讀到這里,這篇“Linux的fork函數(shù)使用實(shí)例分析”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。