- 论坛徽章:
- 0
|
原帖由 naker 于 2006-11-7 21:52 发表
你的第一个程序,没加exit,也没有exec函数,子进程执行完else,按父进程代码继续往下走。
第二个程序,子进程从fork分叉的那一点开始往下执行,fork上面的是不执行的。
我有把程序改了一下,
#include <stdio.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
pid_t pid;
int i = 0;
printf("asfsda\n");
for(i=0;i<3;i++)
//while(1)
{
printf("%d pid = %d\n", i, getpid());
if( (pid=fork()) < 0){
fprintf(stdout, "fork error on %d\n",i);
}else if( pid > 0){
printf("parent fork %d pid = %d\n", i, getpid());
}else{
printf("child fork %d pid = %d\n", i, getpid());
//exit(0); //不明白的地方
}
}
return(0);
}
结果:
asfsda
0 pid = 25141
child fork 0 pid = 25142
1 pid = 25142
parent fork 0 pid = 25141
1 pid = 25141
child fork 1 pid = 25143
2 pid = 25143
parent fork 1 pid = 25142
2 pid = 25142
child fork 2 pid = 25146
parent fork 2 pid = 25142
child fork 1 pid = 25144
2 pid = 25144
parent fork 1 pid = 25141
2 pid = 25141
child fork 2 pid = 25148
parent fork 2 pid = 25141
child fork 2 pid = 25145
parent fork 2 pid = 25143
child fork 2 pid = 25147
parent fork 2 pid = 25144
打印pid 和打印parent 的数目一样多,也就是说子进程是从 for(i=0;i<3;i++)往下执行的,
那么是不是说在没有exit或exec(也就是没有终止或被覆盖)的情况下,
1。无循环:子进程执行分支下的语句。
2。有循环:子进程执行循环里的语句,而不是fork分支里的语句?
这是不是fork对循环的特殊处理?
至于exit和_exit的关系,不是太清楚,
http://bbs.chinaunix.net/viewthread.php?tid=62916
里也有讨论,我看我们公司里这方面的程序,也是用的exit,
没出现什么问题呀!
期待中!! |
|