【1】不算main这个进程自身,到底创建了多少个进程啊?
int main(int argc, char* argv[])
{
fork();
fork() && fork() || fork();
fork();
}
【解析】只看这句, fork() && fork() || fork(); 结果有5个进程。第一句 ,fork 后进程加倍,所以执行 fork() && fork() || fork() 后有10个进程。最后一句进程加倍,就是20个 减去主进程,结果共有 19个。
【2】再看一下两个例子的对比
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char ** argv )
{
int i;
for(i = 0;i < 2;i++)
{
fork();
printf("%d\n",i);
}
}
然后我们编译执行,执行的结果是0
1
1
0
1
1
为了便于分析,我们每次都输出当前进程的ppid(父进程)以及当前进程的pid
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char ** argv )
{
int i;
for(i = 0;i < 2;i++)
{
fork();
printf("%d PPID:%d PID:%d\n",i,getppid(),getpid());
}
}