使用fork循環創建子進程


假設父進程為“陽澄湖大龍蝦”,那么我接下來就創建5個子進程,分別為:

皮皮蝦1號;

皮皮蝦2號;

皮皮蝦3號;

皮皮蝦4號;

皮皮蝦5號;

陽澄湖大龍蝦這個主進程生了這么多個兒子以后,有點累,需要休息一下

 //Author:kunshanpipixia
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <pthread.h>
 #include <unistd.h>
 int main(void)
 {
     int i;
     pid_t pid = fork();
     for(i=1;i<=5;i++)
     {
         if(fork()==0)//注意此處不要寫pid==0,要寫成fork()==0;要不然只fork一個皮皮蝦。
         {
              break;
         }
     }
     if(pid==0)
     {
     printf("%s%d%s\n","陽澄湖大龍蝦生成了皮皮蝦",i,"");
     }
     if(i==6&&pid>0)//此處條件限制了,只有父進程才能進入該循環。
     {
         sleep(1);//注意此處老父親大龍蝦要等皮皮蝦1秒鍾才執行下一步,你們可以去掉試試看是啥結果。
 
          printf("生完皮皮蝦了,大龍蝦的任務完成了\n");
 
     }
         return 0;
 }

最終輸出如下:

 

 證明已經創建好了5個子進程。

個人心得體會:

1. 注意掌握好fork()的返回值。

如果創建成功,子進程返回0,父進程返回子進程PID。

如果失敗,返回-1。

2. 注意fork這個動作完成后,子進程和父進程一同執行以后的代碼,這也是我沒有將子進程的printf放到if循環里但是仍能打印出來5個子進程的原因。

3. 如下圖所示,每次執行一次,皮皮蝦生出來的順序都不一樣。這和CPU內部的調度算法有關。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM