Linux启动中init进程的处理

来源:互联网 发布:米8运输直升机数据 编辑:程序博客网 时间:2024/05/17 23:10


Linux启动中init进程的处理:
init进程会根据/etc/inittab配置文件来初始化系统,inittab文件内容大致如下:

12345678910111213
# The default runlevelid:2:initdefault# Boot-time system configuration/initialization scriptsi::sysinit:/etc/rc.d/rc.sysinit# Runlevelsl0:0:wait:/etc/init.d/rc 0l1:1:wait:/etc/init.d/rc 1l2:2:wait:/etc/init.d/rc 2l3:3:wait:/etc/init.d/rc 3l4:4:wait:/etc/init.d/rc 4l5:5:wait:/etc/init.d/rc 5l6:6:wait:/etc/init.d/rc 6z6:6:respawn:/sbin/sulogin

可以看到,首先决定启动等级,然后执行rc.sysinit初始化(检查磁盘,激活交换分区),然后根据启动等级执行/etc/init.d/rc,启动等级作为参数传入,然后就会跳到/etc/rcN.d/下面(N为启动等级),然后执行里面的文件,而里面的文件都是指向/etc/init.d/下面的符号链接。如下:

12
lrwxrwxrwx 1 root root  20 2011-01-29 13:53 S20fancontrol -> ../init.d/fancontrollrwxrwxrwx 1 root root  20 2011-01-29 13:53 S20kerneloops -> ../init.d/kerneloops

可以看到,实际上接着init启动的服务都是通过init.d目录中的脚本控制的。至于S20fancontrol,中S和20则表示传入S(Start)参数以及启动优先级(越小越高)。所以现在,你应该能明白为什么有些操作说重启某个服务用到了如下的形式:

1
/etc/init.d/xxx start/restart/stop

这种init的过程是System V Init机制,有个缺点就是根据inittab文件来执行,整个过程实际上是一个串行启动的方式,即,服务是一个接一个的启动,所以造成了Linux的启动速度不快。所有后来有人提出了SysVinit的替代程序,从而大大加速了Linux的启动,其中最著名的,也就是现在Ubuntu中使用的upstart了。
———————————–
再来看看Ubuntu中init进程的处理:
前文说到,Ubuntu使用了upstart来进行初始化处理,那么为什么还要说是init进程了?这是因为现在的Ubuntu10.04中还没有完全独立使用upstart启动机制,而是采用SysVinit+Upstart结合的方式(主要是为了和第三方软件兼容)。所有在Ubuntu10.04及以后,你会发现三个特点:
1 没有标准init进程中的/etc/inittab以及rc.sysinit文件。
2 没有标准Upstart中初始化用的rc-default文件以及事件触发目录/etc/event.d。
3 Ubuntu已经不再严格区分各个启动等级(Runlevel)了。

在Ubuntu中,和init有关的就是/etc/init /etc/init.d /etc/rcN.d了(N为启动等级Runlevel,S代表单用户模式)。注意。这里的init,指的是基于Upstart的初始化进程。Ubuntu中的启动流程如下:
1 init读取/etc/init/rc-sysinit.conf文件来确定启动等级,关键内容如下:

123
# Default runlevel, this may be overriden on the kernel command-line# or by faking an old /etc/inittab entryenv DEFAULT_RUNLEVEL=3

2 传递参数给/etc/init.d/rc
3 随后rc根据参数执行/etc/rcN.d里面的脚本
4 rcN.d里面的脚本指向init.d下的脚本,从而让某服务启动
因为Ubuntu中对Runlevel的划分不再明显,所有通过更改Runlevel来裁剪服务的话有时无效,这时候可以通过更改/etc/rcN.d中的脚本来实现。具体可以参见:

12
man rc-updateman initctl

如果Ubuntu完全采用Upstart的话,应该就没有启动等级这个概念了,然后所有的事件触发都在/etc/event.d中定义了,rcN.d中的内容也会被移动到event.d中了。
———————————-
参考资料:

http://apps.hi.baidu.com/share/detail/21129066

http://dpinglee.blog.163.com/blog/static/14409775320104244155181/

http://www.linuxdiyf.com/viewarticle.php?id=88835

http://upstart.ubuntu.com/getting-started.html

http://blog.sina.com.cn/s/blog_402a2fb60100ksmd.html

0 0
原创粉丝点击