开发者学堂课程【物联网开发- Linux 高级程序设计全套视频:创建进程扩展】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/660/detail/10991
创建进程扩展
内容介绍:
一、创建子进程1
二、创建子进程2
三、公共代码
四、举例
一、创建子进程1:
扩展一下关于创建进程的题,点击 include ,stdio.h,下一行输入 include ,unistd.h。
假如我在一个程序当中,让父进程创建两个子进程,
然后是“pid-t pid1,pid2”。
第一个进程“pid1=fork();
”创建一个子进程,如果 pid1<0,这是出错的情况。
else if (pid1=0)//子进程1,
然后else//父进程 。
二、创建子进程2:
如果我想创建第二个子进程的话,我在父进程中再生成二次就是pid2=fork();if(pid2<0),就是失败的情况。
else if (pid2=0)//子进程2,然后else这个是父进程。
注意一下,因为这一块代码是子进程1不会执行,所以子进程1不会去 fork ,只有父进程去 fork 了,所以说才有三个进程:父进程,子进程1,子进程2。
三、公共代码:
下面是公共代码,这里也可以执行父进程的代码。
但这个代码稍稍一改,就出现一种情况,改一个 test2.c,连续来两个 fork ,下面都去掉会出什么效果,下面是其他代码。
然后说创建两个子进程,写代码的时候,两个fork是两个子进程。但这样会有问题,这是父进程的代码,父进程fork的第八行,fork 时产生子进程1,
再看这一个父进程中第九行又执行一个 fork ,创建一个子进程2,再往下执行代码结束。
但是看子进程1从第九行执行,所以子进程1又执行了一个 fork ,又创建了一个子进程,这个是子进程1的子进程--孙进程,孙进程再往下结束,子进程1再往下结束。
所以说,如果你在代码当中连续两个 fork 的话,总共有4个进程,其实是二的二次方。
四、举例:
笔试面试的时候有这样的题“int i;
for(i=0;i<5;i++) ,Pid=fork();”请问最终会有多少个进程,二的五次方。
Printf(“pid=§d\n”,pid);打出多少个 pid 加上父进程就知道有多少个子进程。
所以说,它是二的五次方,你可以按照我刚才的方式去分析,二的N次方。
比较简单的方法,在这直接打 pid ,你看能数出多少个 pid加1就
可以,2到548,这是一个进程的扩展。