- 论坛徽章:
- 0
|
fork()的子进程到底从哪里开始运行?
int
main(void)
{
int i;
pid_t childpid;
fprintf(stderr, "Before dowork()!\n" ;
for(i=0;i<2;i++)
{
if(childpid=fork())
{
fprintf(stderr, " arent:[i=%d]-->;[Process=%d]-->;[Parent=%d]-->;[Child=%d]\n",
i,getpid(),getppid(),childpid);
break;
}
fprintf(stderr, "Child:[i=%d]-->;[Process=%d]-->;[Parent=%d]-->;[Child=%d]\n",
i,getpid(),getppid(),childpid);
}
fprintf(stderr, "After dowork()!\n" ;
return 1;
}
运行结果:
inc031230@INC031230 /work/LibTest
$ ./semaphore.out
Before dowork()!
Parent:[i=0]-->;[Process=5924]-->;[Parent=968]-->;[Child=5972]
After dowork()!
Child:[i=0]-->;[Process=5972]-->;[Parent=1]-->;[Child=0]
inc031230@INC031230 /work/LibTest
$ Parent:[i=1]-->;[Process=5972]-->;[Parent=1]-->;[Child=5968]
After dowork()!
Child:[i=1]-->;[Process=5968]-->;[Parent=1]-->;[Child=0]
After dowork()!
注意!:以上看上去2次输出,是一次运行的结果。
请帮忙解释一下为什么结果是这样。谢谢!
我没有看懂的地方是,1)为什么会有2次Parent输出。fork()出来的都是子进程呀?我开始估计总共要输出3次(fork()2次,2个子进程分别输出,原来的父进程1次);2)为什么会运行一次,结果2次输出?
ps:上个括号里的问题请你不用考虑了,我没有思考清楚。 |
|