新聞中心
一個進程,包括代碼、數(shù)據(jù)和分配給進程的資源。fork()函數(shù)通過系統(tǒng)調(diào)用創(chuàng)建一個與原來進程幾乎完全相同的進程,也就是兩個進程可以做完全相同的事,但如果初始參數(shù)或者傳入的變量不同,兩個進程也可以做不同的事。

創(chuàng)新互聯(lián)專注于牟平網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供牟平營銷型網(wǎng)站建設,牟平網(wǎng)站制作、牟平網(wǎng)頁設計、牟平網(wǎng)站官網(wǎng)定制、小程序制作服務,打造牟平網(wǎng)絡公司原創(chuàng)品牌,更為您提供牟平網(wǎng)站排名全網(wǎng)營銷落地服務。
一個進程調(diào)用fork()函數(shù)后,系統(tǒng)先給新的進程分配資源,例如存儲數(shù)據(jù)和代碼的空間。然后把原來的進程的所有值都復制到新的新進程中,只有少數(shù)值與原來的進程的值不同。相當于克隆了一個自己。
實例:
/*************************************************************************
> File Name: fork_test.c
> Author:
> Mail:
> Created Time: 2016年06月06日 星期一 09時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)計結(jié)果是: %d \n",count);
getchar();
return 0;
} 123456789101112131415161718192021222324252627
fork出錯可能有兩種原因: 1)當前的進程數(shù)已經(jīng)達到了系統(tǒng)規(guī)定的上限,這時errno的值被設置為EAGAIN。 2)系統(tǒng)內(nèi)存不足,這時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
運行結(jié)果
查看進程
分析
分享名稱:詳解Linuxfork()函數(shù)
轉(zhuǎn)載源于:http://m.fisionsoft.com.cn/article/dpcgiph.html


咨詢
建站咨詢
