|
我对进程的概念不是很清楚,有点问题想请教,附在程序代码后的注释里
main(void)
{
pid_t child;
if((child=fork())==-1) //当此处用fork创建子进程后,程序的执行流程是什么,子进
程里执行的是什么程序代码?
{
printf("Fork Error:%s\n",strerror(errno));
exit(1);
}
else if(child>0) //如果创建子进程成功后,程序到此处,用while(1),
while(1); //岂不是死在这儿了?那子进程在执行什么代码呢?
if(kill(getppid(),SIGTERM)==-1)
{
printf("Kill Parent Error:%s\n",strerror(errno));
exit(1);
}
{
int mailfd;
while(1)
{
if((mailfd=open(MAIL,O_RDONLY))!=-1)
{
fprintf(stderr,"%s","\007");
close(mailfd);
}
sleep(SLEEP_TIME);
}
}
}
当我读上面那段程序段时,我也猜到while(1)应该是父进程执行的代码,让父进程阻塞在那儿,然后“while(1)"下面的那些程序段应该是子进程执行的代码段。如果说fork()返回两次值,那么程序流程能解释通。可是我有点疑问,这两次fork()返回都分别在什么时机呢?第一次返回后程序执行到“while(1)”处后,阻塞在那儿,这时fork()又返回值吗?那样的话,不是说程序执行到"while(1)"处后,又往上执行,去判断pid的值啦?这种程序流程好像在c语言里不大常见啊。
哪位高手帮忙点破一下fork()应用的这种机制,谢谢! |
|