三个fork函数一共能创建多少个进程?

此题为刷题过程中遇到了题目,比较绕,就下下来记录一下。

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个进程。

有点小啰嗦。。。。在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章