for(int i = 0; i<2; i++)
{
if(fork() == 0)
printf("A\n");
else
printf("B\n");
}
for(int i = 0; i<2; i++)
{
if(fork() == 0)
printf("A");
else
printf("B");
}
該循環中打印沒有字符 "\n",無法刷新緩衝區
每一次fork()會複製之前進程中緩衝區的字符
最後執行結果爲BBBAABAA
if(fork() && fork())
printf("A\n");
else
printf("B\n");
該if塊中第一個fork()生成一個子進程,返回0,所以第二個fork()不會執行
父進程返回pid,執行第二個fork(),再次產生一個子進程
所以最終printf調用了三次
最後執行結果爲
A
B
B
#include <stdio.h>
#include <stdlib.h>
void f0()
{
int tmp = 0;
int pid = fork();
if(pid == 0)
{
tmp++;
printf("son\n");
}
else if(pid > 0)
{
printf("parents\n");
}
else
{
return;
}
printf("%d\n",tmp);
}
int tmp1 = 5;
void f1()
{
int pid = fork();
if(pid == 0)
{
tmp1++;
printf("son\n");
}
else if(pid > 0)
{
printf("parents\n");
}
else
{
return;
}
printf("%d\n",tmp1);
}
void f2()
{
int *tmp2 = (int*)malloc(sizeof(int));
*tmp2 = 0;
int pid = fork();
if(pid == 0)
{
(*tmp2)++;
printf("son\n");
}
else if(pid > 0)
{
printf("parents\n");
}
else
{
return;
}
printf("%d\n",*tmp2);
}
以上三個函數輸出中父進程與子進程打印的tmp值均不相同
可得出結論,fork() 後生成新的子進程與父進程是相互獨立的,擁有獨立的VMA