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