init是Linux系统开发执行的第一个进程,进程ID为1,是系统所有进程的起点,主要用来执行一些开机初始化脚本和监视进程。Linux系统在完成核内引导以后就开始运行init程序,init程序需要读取配置文件/etc/inittab。inittab是一个不可执行的文本文件,它由若干行命令所组成。在RHEL 4系统中,inittab配置文件的内容如下所示。
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# 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+DELETE]重启系统
# 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个运行级别。
● 0:关机。
● 1:单用户字符界面。
● 2:不具备网络文件系统(NFS)功能的多用户字符界面。
● 3:具有网络功能的多用户字符界面。
● 4:保留不用。
● 5:具有网络功能的图形用户界面。
● 6:重新启动系统。
3.action
Init有如下几种行为,如表1.1所示。
表1.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文件定义 |
4.process
process为init执行的进程,这些进程都保存在目录/etc/rc.d/rcX中,其中的X代表运行级别,rc程序接收X参数,然后运行/etc/rc.d/rc.X下面的程序。使用如下命令可以查看/etc/rc.d目录内容。
#ls -l /etc/rc.d/
总用量 112
drwxr-xr-x 2 root root 4096 3月 15 14:44 init.d
-rwxr-xr-x 1 root root 2352 2004-03-17 rc
drwxr-xr-x 2 root root 4096 3月 15 17:42 rc0.d
drwxr-xr-x 2 root root 4096 3月 15 17:42 rc1.d
drwxr-xr-x 2 root root 4096 3月 15 17:42 rc2.d
drwxr-xr-x 2 root root 4096 3月 15 17:42 rc3.d
drwxr-xr-x 2 root root 4096 3月 15 17:42 rc4.d
drwxr-xr-x 2 root root 4096 3月 15 17:42 rc5.d
drwxr-xr-x 2 root root 4096 3月 15 17:42 rc6.d
-rwxr-xr-x 1 root root 220 2003-06-24 rc.local
-rwxr-xr-x 1 root root 27411 2005-08-03 rc.sysinit
使用如下命令查看/etc/rc.d/rc5.d的内容。
# ls -l /etc/rc.d/rc5.d
总用量 432
lrwxrwxrwx 1 root root 21 4月 29 15:11 K01tog-pegasus -> ../init.d/tog-pegasus
lrwxrwxrwx 1 root root 24 4月 29 14:20 K02NetworkManager -> ../init.d/NetworkManager
lrwxrwxrwx 1 root root 17 4月 29 15:29 K02oddjobd -> ../init.d/oddjobd
lrwxrwxrwx 1 root root 14 4月 29 15:31 K05innd -> ../init.d/innd
lrwxrwxrwx 1 root root 19 4月 29 14:17 K05saslauthd -> ../init.d/saslauthd
lrwxrwxrwx 1 root root 19 4月 29 14:21 K10dc_server -> ../init.d/dc_server
lrwxrwxrwx 1 root root 16 4月 29 14:21 S09pcmcia -> ../init.d/pcmcia
lrwxrwxrwx 1 root root 17 4月 29 14:17 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 16 4月 29 14:17 S12syslog -> ../init.d/syslog
这些文件都是符号链接,以S打头的标识启动该程序,而以K打头的标识终止该程序,后面的数字标识执行顺序,越小越先执行,剩下的标识程序名。系统启动或者切换到该运行级别时会执行以S打头的程序,系统切换到该运行级别时会执行以K打头的程序。
这个目录下的程序可通过chkconfig程序进行管理,当然这个目录下的程序需要符合一定规范,如果了解shell编程,可以查看这些符号链接所指向的程序的源码。
init也是一个进程,和普通的进程具有一样的属性。比如修改了/etc/inittab,想让修改马上生效,可通过运行“kill -SIGHUP 1”来实现,也可通过运行“init q”来实现。
华清远见嵌入式linux视频教程免费下载
热点链接:
1、嵌入式linux驱动要学哪些
2、嵌入式Linux串口编程基础
3、嵌入式Linux内核如何编译
4、Linux内核模块程序结构
5、典型嵌入式Linux系统设置
更多新闻>> |