- What will produce on your display this program. Why?
#include <stdio.h>
int i;
int main() {
for(i=0;i<2;i++){
if(fork())
fork();
}
printf ("%d\n", i);
system ("echo i++");
}
以上这段代码产生了9个进程
第一个fork循环两次会产生3个父进程和3个子进程
每个父进程会执行第二次fork产生一个父进程和一个子进程,一共3*2=6个父子进程
加上之前fork的3个子进程一共是9个进程
#include <stdio.h>
int i;
int main() {
for(i=0;i<2;i++){
fork();
fork();
}
printf ("%d\n", i);
system ("echo i++");
}
以上这段代码产生了16个进程,
1x2(第一次fork)x2(第二次fork)|(第一次循环结束)|
x2(第一次fork)x2(第二次fork) |第二次循环结束|
一个循环n次的fork会结束时会有2^n个的进程(包含主进程)
循环内每多一个fork会多产生2^n倍进程
- 例如
for(int i=0;i<3;i++)
{
fork();
}
system("echo +")
这段代码会显示8(2^3)个+
如果改成这样
for(int i=0;i<3;i++)
{
fork();
fork();
}
system("echo +")
则会显示8*8=64个+
网友评论