溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux的fork函數(shù)使用實(shí)例分析

發(fā)布時(shí)間:2022-02-18 09:24:25 來源:億速云 閱讀:115 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(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è)自己。

Linux的fork函數(shù)使用實(shí)例分析

實(shí)例:

/*************************************************************************
   > 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
Linux的fork函數(shù)使用實(shí)例分析

?

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é)果

Linux的fork函數(shù)使用實(shí)例分析

?

查看進(jìn)程

Linux的fork函數(shù)使用實(shí)例分析

?

分析 Linux的fork函數(shù)使用實(shí)例分析

讀到這里,這篇“Linux的fork函數(shù)使用實(shí)例分析”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(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)容。

AI