#include<iostream>
#include<unistd.h>
#include<stdio.h>
using namespace std;
int main()
{
fork();
fork();
fork();
fork();
printf("*"); /*This prints 16 stars*/
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在使用时fork(),为什么打印16*?
据我所知,fork()生成一个新的子进程,它们都执行相同的进程,这可以解释为什么一个fork生成2个星,但是,有四个forks它打印16个,我可以看到它每个都加倍fork().
但我不明白为什么.每个fork是否执行下面的函数和参数?
因为第一叉将分成两个过程中,第二fork()呼叫将被本两个过程被调用,这些分裂两个过程进入4.这将继续下去,直到所有的叉()调用被称为在每个过程.所以你最终2^4 = 16打电话给printf("*")
在"图表"中,每个条形表示调用函数时正在执行的进程数.所以函数执行的次数与条数一样多.
| fork() // The first processes creates a second (2 total)
| fork() | // Those 2 processes start 2 more (4 total)
|| fork() || // Those 4 processes start 4 more (8 total)
|||| fork() |||| // Those 8 processes start 8 more (16 total)
|||||||| printf() |||||||| // resulting in 16 calls to printf()
Run Code Online (Sandbox Code Playgroud)
每个fork是否执行下面的函数和参数?
是的,正如您从图中可以看到的,当一个进程分叉创建的进程(以及创建它的进程)继续执行fork之后的下一条指令.
| 归档时间: |
|
| 查看次数: |
385 次 |
| 最近记录: |