本文将对kernel装载完成时,对init进程启动的一系列过程作一个展开学习,其实这一过程也就是一系列的脚本执行的过程,这其中
涉及到了运行级别的概念,本文分析的的init 启动方式是BSD式的,至于像RedHat的Sys V的方式,分析展开的过程类似,文中有未
尽详细的地方希望和大家讨论交流。
Slack:~$ pstree -np
init(1)-+-udevd(790)-+-udevd(1711)
| `-udevd(1712)
|-syslogd(1327)
|-klogd(1331)
|-inetd(1470)
|-sshd(1478)
|-acpid(1485)
|-dbus-daemon(1497)
|-hald(1502)---hald-runner(1503)-+-hald-addon-inpu(1522)
| .......
init 进程号为1,是由kernul 启动的第一个进程,之后产生(spawn)的所有进程都是 init 的子孙(descendant),像在shutdown、reboot
的时候的SIGTERM和SIGKILL信号也是由init 进程向所有后裔进程发出的。man init 可知运行级(runlevel)是一种允许一组特定的启动和退出
的系统软件层的配置。有效的运行级为:0-6,S,s,其中S 和s 是一样的,s 是 single,即单用户模式,当然7-9的运行级也是合法的,只是不常
见。运行级0 是用于停止系统,运行1 是指单用户模式,运行级6 用于重启系统,init 命令就可以用于有不同的运行级之间切换。不同的是
Slackware 是把运行级4 作为图形模式的。
init 的配置文件是/etc/inittab,inittab的作用是为init 进程定义了一系列的入口,
24 id:4:initdefault: 其中4 定义了了默认运行级别是进入图形模式
27 si:S:sysinit:/etc/rc.d/rc.S init 首先执行rc.S 脚本,sysinit 指定有系统启动时执行并且忽略运行级别,rc.S中将挂载 /proc, /sys, /swap
并且加载内核模块,后面详细分析
30 su:1S:wait:/etc/rc.d/rc.K 1S指定在用户模式中执行,wait 指定在系统执行完 rc.K 才继续往下执行,这里主要定义单用户模式下的
一些环境变量
33 rc:2345:wait:/etc/rc.d/rc.M 多用户模式下执行rc.M 脚本,启动一些重要的服务和用户进程如Apach, mysql, X window,后面详细分析
36 ca::ctrlaltdel:/sbin/shutdown -t5 -r now 俗称三指礼,指按下ctrl + alt + del 时触发的事件,这里定义的事情是重启系统,但
Slack:~$ cat /proc/sys/kernel/ctrl-alt-del
0
72 x1:4:respawn:/etc/rc.d/rc.4 运行级为4时,startx
有一些不常用的服务图中笔者作了省略