- 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個+