LINUX内核求教
读了赵炯博士的LINUX 0.11的详细注解
对于/init/中的MAIN.c文件中的后面一小部分不大理解
179 if(!(pid=fork()){
180 close(0);
181 if(open("/etc/rc",0_RDONLY,0))
182 _exit(1);
183 execve("/bin/sh",argc_rc,envp_rc);
184 _exit(2);
185 }
186 if(pid>0)
187 while(pid!=wait(&i))
188 /**/
189 while(1){
if((pid=fork())<0){
printf("Fork failed in init\r\n";
continue;
}
if(!pid){
close(0);close(1);close(2);
setsid();
(void) open("/dev/tty0",0_RDWR,0);
(void) dup(0);
(void) dup(0);
_exit(execve("/bin/sh",argv,envp));
}
while(1)
if (pid==wait(&i))
break;
printf("\n\rchild %d died with code %04x\n\r",pid,i);
sync();
}
exit(0);
}
从186行开始我不大理解这都是在干什么嘛? 我觉得183行的execve调用是不会返回的啊 那么下面的代码不就没有执行的机会了嘛? 就算调用失败,下面的代码我觉得没有必要搞的 那么复杂 用一个while(1);不就行了 干吗还让初始进程创建一个子进程呢?有什么意义?
请高手详解 谢谢