假设父进程为“阳澄湖大龙虾”,那么我接下来就创建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 ","阳澄湖大龙虾生成了皮皮虾",i,"号"); } if(i==6&&pid>0)//此处条件限制了,只有父进程才能进入该循环。 { sleep(1);//注意此处老父亲大龙虾要等皮皮虾1秒钟才执行下一步,你们可以去掉试试看是啥结果。 printf("生完皮皮虾了,大龙虾的任务完成了 "); } return 0; }
最终输出如下:
证明已经创建好了5个子进程。
个人心得体会:
1. 注意掌握好fork()的返回值。
如果创建成功,子进程返回0,父进程返回子进程PID。
如果失败,返回-1。
2. 注意fork这个动作完成后,子进程和父进程一同执行以后的代码,这也是我没有将子进程的printf放到if循环里但是仍能打印出来5个子进程的原因。
3. 如下图所示,每次执行一次,皮皮虾生出来的顺序都不一样。这和CPU内部的调度算法有关。