LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: d00m3d

探讨 /etc

[复制链接]
 楼主| 发表于 2006-3-7 22:12:27 | 显示全部楼层
自 2004.2 以後,我也没再碰 Gentoo 呢!
回复 支持 反对

使用道具 举报

发表于 2006-3-7 22:26:38 | 显示全部楼层
http://www.freebsd.org/cgi/man.c ... 0-RELEASE+and+Ports

http://www.freebsd.org/cgi/man.cgi?query=init&sektion=8

FreeBSD 的文档,说了一下 rc/init 是怎么弄的。至于具体的,要仔细看看,我先尝试 LFS 去。
回复 支持 反对

使用道具 举报

发表于 2006-3-7 23:39:13 | 显示全部楼层
init是kernel创建的第一个进程;我ldd /sbin/init得到结果如下,

ldd init
        libc.so.6 => /lib/libc.so.6 (0x00002aaaaabc3000)
        /lib64/ld-linux-x86-64.so.2 (0x00002aaaaaaab000)
竟然不是静态连接的?那么这个共享库又是谁加载的?

还有init执行的大部分都是shell脚本,但那个时候bash还没有加载吧?这些脚本是怎么运行的呢?
不太明白,请指教。
回复 支持 反对

使用道具 举报

发表于 2006-3-8 00:31:41 | 显示全部楼层
那个时候已经把 / mount了,所以读取到的就是 /lib 的库了。。

运行脚本不一定是在bash下的。。。
回复 支持 反对

使用道具 举报

发表于 2006-3-8 01:17:42 | 显示全部楼层
init 可以 fork bash 啊!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-3-8 06:53:24 | 显示全部楼层
Post by dyhml
init 可以 fork bash 啊!
不明白,此话的意思是?
回复 支持 反对

使用道具 举报

发表于 2006-3-8 08:02:39 | 显示全部楼层
就前面的话,说明, init 是用 fork 调用 bash 执行 /etc/init.d 下面的脚本.
所以,一般 bash 必须 在 /bin/bash 即/ 分区里,而不是后来挂上的 /usr /usr/local
回复 支持 反对

使用道具 举报

发表于 2006-3-8 10:32:28 | 显示全部楼层
init是bin格式的,解析的是Inittab,至于rc.d应该是shell干的,不是init完成的了
如果init通过inittab无法正常启动shell,rc.d里面的就不会执行了。
回复 支持 反对

使用道具 举报

发表于 2006-3-8 12:40:19 | 显示全部楼层
init可以启动bash,那么是不是每执行一个脚本bash就启动一次,执行完一个脚本bash就退出呢?

还有init等程序都动态连接到libc库,libc这个库又是谁加载进内存让init可以执行呢?谢谢
回复 支持 反对

使用道具 举报

发表于 2006-3-8 12:49:40 | 显示全部楼层

re

Post by ifree
init可以启动bash,那么是不是每执行一个脚本bash就启动一次,执行完一个脚本bash就退出呢?

[color="red"]不是,bash只需要执行一次就可以了。他应该算是一种守护进程,不会轻易退出的。
还有init等程序都动态连接到libc库,libc这个库又是谁加载进内存让init可以执行呢?谢谢
[color="Red"]如果init是动态编译的,运行时需要lib支持。这个过程和kernel有关系,和shell没有关系。
在shell下面执行./helloworld的过程如果你清楚,就知道init如何运行了:
1.shell发现执行一个elf文件
2。shell启动系统调用exec执行hellowrld
3。hellworld的所有问题,都和exec有关,和shell已经没有关系


更像细的请参考exec内核实现
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表