一、Linux引导流程
1、固件firmware(CMOS/BIOS) POST加电自检
2、自举程序BootLoader(GRUB) 载入内核
3、载入内核Kernel 驱动硬件
4、启动进程init
5、读取执行配置文件/etc/inittab
a、从默认运行级别运行(initdefault)
b、执行脚本/etc/rc.d/rc.sysinit 这个脚本任何时候系统启动都会运行
c、执行脚本/etc/rc.d/rc 这个脚本会判断默认启动级别
d、执行对应运行级别的/etc/rc.d/rc[0123456].d 启动对应的服务
e、username password……
二、Linux运行级别
Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode 没有图形界面,只有root可以登录,类似windows的安全模式
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking) NFS(network file system)
# 3 - Full multiuser mode
# 4 - unused 没有使用的运行级别,可以用户自定义
# 5 - X11 系统缺省的运行级别 图形化的多用户级别
# 6 - reboot (Do NOT set initdefault to this) 重新启动运行级别
·init [0123456] 设置从什么启动级别启动
三、inittab文件的解释
在inittab中,所有的条目采取以下格式
id:runlevel:action:process
id:标示符,一般为两位字母或数字
runlevel:指定的运行级别,可以指定多个
action:运行状态
process:指定要运行的脚本/命令
1、关键脚本文件介绍
/etc/rc.d/rc.sysinit 这个脚本只要系统运行,它就会运行一次,如果有什么命令想要在系统一运行就指定,可以写在这个脚本的最后
/etc/rc.d/rc[0123456].d 这是个目录,对应每种运行级别下要开始和停止的服务
例:S 14 nfslock
S start 开始服务
K kill 停止服务 (大小写敏感)
14 后面跟的数字表示运行的优先级
nfsclock 在后面的字母序列表示运行脚本名称
/etc/rc.d/init.d 这个目录下存放着你安装Linux系统时安装的启动服务,通过sshd命令来单独启动或关闭
设置自启动程序:当我们编写了一个脚本文件,想要在某个运行级别下运行时,可以使用软连接,将该脚本文件链接到/etc/rc.d/rc[012345].d这个目录下,重新命名如:msg.script->S100msg.script
例:
ln -s /etc/rc.d/init.d/msg.script /etc/rc.d/rc3.d/S100msg.script
2、action的一些值
行为 | 描述 |
respawn |
一旦第4项指定的process命令中止,便重新运行该命令。 |
wait |
执行第4项指定的process,并等其结束后再运行其它命令。(阻塞) |
once |
执行第4项指定的process,不等待它执行完成,继续运行其它命令。 |
boot |
不论在哪个执行等级,系统启动时都会运行第4项指定的process。 |
bootwait |
不论在哪个执行等级,系统启动时都会运行第4项指定的process,且一直等它执行完备。 |
off |
关闭任何动作,相当于忽略该配置行。 |
ondemand |
进入ondemand执行等级时,执行第4项指定的process。 |
initdefault |
系统启动后进入的执行等级,该行不需要指定process。 |
sysinit |
不论在哪个执行等级,系统会在执行boot及bootwait之前执行第4项指定的process。 |
powerwait |
当系统的供电不足时执行第4项指定的 process,且一直等它执行完毕。 |
powerokwait |
当系统的供电恢复正常时执行第4项指定的process,且一直等它执行完毕。 |
powerfailnow |
当系统的供电严重不足时执行第4项指定的process。 |
powerfail |
当出现电源错误时执行第4项指定的process命令,不等待其结束。 |
ctrlaltdel |
当用户按下【Ctrl+Alt+Del】时执行第4项指定的 process。 |
kbrequest |
当用户按下特殊的组合键时执行第4项指定的process,此组合键需在keymaps文件定义。 |
四、父子进程的关系
1、父进程先于子进程终止:
此种情况就是我们前面所用的孤儿进程。当父进程先退出时,系统会让init进程接管子进程 。
2、子进程先于父进程终止,而父进程又没有调用wait或waitpid函数
此种情况子进程进入僵死状态,并且会一直保持下去直到系统重启。子进程处于僵死状态时,内核只保存进程的一些必要信息以备父进程所需。此时子进程始终占有着资源,同时也减少了系统可以创建的最大进程数。
僵死状态:一个已经终止、但是其父进程尚未对其进行善后处理(获取终止子进程的有关信息,释放它仍占有的资源)的进程被称为僵死进程(zombie)。ps命令将僵死进程的状态打印为Z 。
3、子进程先于父进程终止,而父进程调用了wait或waitpid函数
此时父进程会等待子进程结束。
五、自举程序grup的配置与应用