- 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++");
}
以上這段代碼產(chǎn)生了9個(gè)進(jìn)程
第一個(gè)fork循環(huán)兩次會(huì)產(chǎn)生3個(gè)父進(jìn)程和3個(gè)子進(jìn)程
每個(gè)父進(jìn)程會(huì)執(zhí)行第二次fork產(chǎn)生一個(gè)父進(jìn)程和一個(gè)子進(jìn)程,一共3*2=6個(gè)父子進(jìn)程
加上之前fork的3個(gè)子進(jìn)程一共是9個(gè)進(jìn)程
#include <stdio.h>
int i;
int main() {
for(i=0;i<2;i++){
fork();
fork();
}
printf ("%d\n", i);
system ("echo i++");
}
以上這段代碼產(chǎn)生了16個(gè)進(jìn)程,
1x2(第一次fork)x2(第二次fork)|(第一次循環(huán)結(jié)束)|
x2(第一次fork)x2(第二次fork) |第二次循環(huán)結(jié)束|
一個(gè)循環(huán)n次的fork會(huì)結(jié)束時(shí)會(huì)有2^n個(gè)的進(jìn)程(包含主進(jìn)程)
循環(huán)內(nèi)每多一個(gè)fork會(huì)多產(chǎn)生2^n倍進(jìn)程
- 例如
for(int i=0;i<3;i++)
{
fork();
}
system("echo +")
這段代碼會(huì)顯示8(2^3)個(gè)+
如果改成這樣
for(int i=0;i<3;i++)
{
fork();
fork();
}
system("echo +")
則會(huì)顯示8*8=64個(gè)+