linux内核0.11的main.c的init函数里面这一段代码有什么用?

qinuxman 发布于 2013/12/25 09:49
阅读 1K+
收藏 0
if (!(pid=fork())) {
close(0);
if (open("/etc/rc",O_RDONLY,0))
_exit(1);
execve("/bin/sh",argv_rc,envp_rc);
_exit(2);
}
if (pid>0)

while (pid != wait(&i))


好像注释掉这一段也不会有影响

加载中
0
马太航
马太航
具体请看环境编程第8章 和 内核流程 前3章内容
0
hanf
hanf
这几行不像是内核代码吧~
qinuxman
qinuxman
why
0
mi53
mi53
这里sh的运行方式是非交互式的,因此

执行完rc文件中的命令后就会立即退出,进程2也随之结束。

主要任务是根据/etc/rc文件中设置的信息,执行其中设置的命令,然后根据

/etc/inittab文件中的信息,为每一个允许登录的终端设备使用fork()创建一个子进程,

并在每个新创建的子进程中运行getty。而init进程则调用wait(),进入等待子进程结束

状态。

0
mi53
mi53

再补充一下:

猜测Linus当时是没有写/etc/rd这个文件,但他又希望通过这个文件来执行非交互式shell命令、所以在执行完之后就直接调用_exit(2)提示找不到文件。应该是为以后拓展用吧。

返回顶部
顶部