假設父進程為“陽澄湖大龍蝦”,那么我接下來就創建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內部的調度算法有關。