- 论坛徽章:
- 0
|
看了一下,大有收获!
有几个问题:
代码1:
int main()
{
pid_t pid;
int i = 0;
printf("asfsda\n");
if( (pid=fork()) < 0)
fprintf(stdout, "fork error on %d\n",i);
else if( pid > 0)
printf("parent fork %d\n",i);
else
{
printf("child fork %d\n", i);
//exit(0); //这里不明白
}
return(0);
}
1.这个程序为什么子进程不执行 printf("asfsda\n");呢?子进程不是复制了父进程的所有代码吗?
2.子进程中加不加exit(0); 有什么对执行代码有什么区别?
代码2:
int main()
{
pid_t pid;
int i = 0;
printf("asfsda\n");
for(i=0;i<3;i++)
while(1)
{
if( (pid=fork()) < 0)
fprintf(stdout, "fork error on %d\n",i);
else if( pid > 0)
printf("parent fork %d\n",i);
else
{
printf("child fork %d\n", i);
//exit(0); //不明白的地方
}
}
return(0);
}
1.这个代码多了个循环,在子进程中加不加exit(0);我都试了一下,结果是:
(1)加exit(0);结果:
asfsda
parent fork 0
parent fork 1
child fork 0
child fork 1
child fork 2
parent fork 2
不加exit(0);结果:
asfsda
parent fork 0
parent fork 1
parent fork 2
child fork 0
parent fork 1
child fork 1
parent fork 2
child fork 1
parent fork 2
parent fork 2
child fork 2
child fork 2
child fork 2
child fork 2
据我分析是子进程又fork了子进程的原因.具体可参考http://bbs.chinaunix.net/viewthr ... &highlight=fork .也就是说子进程从for()开始循环.
这里我就不明白了,为什么子进程没有执行printf("asfsda\n");而是从for开始执行呢?是fork函数对循环作特殊处理了吗?
那位高人给解答一下,谢谢了!! |
|