如下代码:请问最终打印输出多少次hello?
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(){
for(int i = 0; i < 5; ++i){
pid_t t = fork();
}
printf("hello\n");
return 0;
}
答案是32,即
2
5
2^5
25
可以理解为:每执行一次fork,进程就分裂成几乎完全一样的两个。进行了五次分裂。
如何控制fork的调用次数为任意值
可以根据fork的返回值判断当前进程是否为子进程,子进程不再执行fork。
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
int main(){
for(int i = 0; i < 5; ++i){
pid_t t = fork();
if(t == 0)break;
}
printf("hello\n");
return 0;
}
这样就只会执行5次了