此题为刷题过程中遇到了题目,比较绕,就下下来记录一下。
int main(void)
{
fork();//位置1
fork();//位置2
fork();//位置3
}
如上述代码所示。
我们顺着程序来捋一遍。。。。。
首先程序执行,创建一个父进程,作为第一个进程该进程的代码如下:
1进程
int main(void)
{
fork();//位置1
fork();//位置2
fork();//位置3
}
然后程序执行到第一行,创建第一个子进程,该子进程由位置2开始执行。所以该进程的代码如下(姑且叫做进程2)
进程2
int main(void)
{
fork();//位置2
fork();//位置3
}
然后2进程的第一个fork又创建了2进程的一个子进程,由位置3开始执行,3进程的代码如下:
进程3
int main(void)
{
fork();//位置3
}/。
此时3进程的fork创建了第4进程,此进程从位置3开始执行,于是函数里没有任何东西,到那时任然是一个进程,这里成为4进程。然后我们回到2进程,此时从位置3开始执行。创建了5进程,这个进程任然是个空的进程。于是再看1进程,在1进程中从位置2开始执行,位置2的fork函数创建了6进程,该进程从位置3开始执行,代码如下:
6进程
int main(void)
{
fork();//位置3
}
此时6进程的fork函数创建了7进程,这个进程任然是一个空进程(从位置4开始执行)。于是再回到1进程,从位置3执行代码,执行位置3的fork函数,创建了8进程这同样是一个空进程,于是,再回到1进程,此时代码执行完毕,父进程结束。
至此一共产生了8个进程。
有点小啰嗦。。。。