4.1.7 Linux的第一个进程:init(1)
init是Linux系统执行的第一个进程,进程ID为1,是系统所有进程的起点,主要用来执行一些开机初始化脚本和监视进程。Linux系统在完成内核引导以后就开始运行init程序,init程序需要读取配置文件/etc/inittab。inittab是一个不可执行的文本文件,它由若干行命令组成。在RHEL4系统中,inittab配置文件的内容如下所示。
# # inittab This file describes how the INIT process should set up # the system in a certain run-level. # # Author: Miquel van Smoorenburg, # Modified for RHS Linux by Marc Ewing and Donnie Barnes # # Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # //表示当前默认运行级别为5,启动系统进入图形化界面 id:5:initdefault: //启动时自动执行/etc/rc.d/rc.sysinit脚本 # System initialization. si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc 0 l1:1:wait:/etc/rc.d/rc 1 l2:2:wait:/etc/rc.d/rc 2 l3:3:wait:/etc/rc.d/rc 3 l4:4:wait:/etc/rc.d/rc 4 //当运行级别为5时,以5为参数运行/etc/rc.d/rc脚本,init将等待其返回 l5:5:wait:/etc/rc.d/rc 5 l6:6:wait:/etc/rc.d/rc 6 //在启动过程中允许按[Ctrl+Alt+Del]重启系统 # Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now # When our UPS tells us power has failed, assume we have a few minutes # of power left. Schedule a shutdown for 2 minutes from now. # This does, of course, assume you have powerd installed and your # UPS connected and working correctly. pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down" # If power was restored before the shutdown kicked in, cancel it. pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled" //在运行级别2、3、4、5上以ttyX为参数执行/sbin/mingetty程序,打开ttyX终端用于用户登录,如果进程退出则再次运行mingetty程序 # Run gettys in standard runlevels 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 //在级别5上运行xdm程序,提供xdm图形方式登录界面,并在退出时重新执行 # Run xdm in runlevel 5 x:5:respawn:/etc/X11/prefdm -nodaemon |
inittab配置文件每行的基本格式如下。
id:runlevels:action:process |
其中某些部分可以为空,下面我们逐一介绍。
1.id
1~2个字符,配置行的唯一标识,在配置文件中不能重复。
2.runlevels
配置行适用的运行级别,在这里可填入多个运行级别,比如12345或者35等。
Linux有7个运行级别。
l 0:关机。
l 1:单用户字符界面。
l 2:不具备网络文件系统(NFS)功能的多用户字符界面。
l 3:具有网络功能的多用户字符界面。
l 4:保留不用。
l 5:具有网络功能的图形用户界面。
l 6:重新启动系统。
3.action
init有如下几种行为,如表4-1所示。
表4-1 init行为
行 为 | 描 述 |
respawn | 启动并监视第4项指定的process, 若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 |
ctrlaltdel | 当用户按下【Ctrl+Alt+Del】时执行的操作 |
kbrequest | 当用户按下特殊的组合键时执行第4项指 定的process,此组合键需在keymaps文件定义 |