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文件定义