LINUX内核求教

woody009 2003-08-22 06:10:29
读了赵炯博士的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);不就行了 干吗还让初始进程创建一个子进程呢?有什么意义?
请高手详解 谢谢
...全文
40 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
火焰射手 2003-08-25
  • 打赏
  • 举报
回复
?子父进程分叉执行,183的execve并不影响后面的代码阿
vinx 2003-08-23
  • 打赏
  • 举报
回复
有空我去看看,是linux 最初的那个0.0.1版本吗,
我觉得linus写的最初的那个版本问题还是蛮多的,有些代码不一定是没有问题的,看的时候应该要注意的,

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧