linux init进程和配置文件inittab

来源:互联网 发布:nba2kol刷球星软件 编辑:程序博客网 时间:2024/06/02 12:53
init进程
Linux完成内核引导之后启动的第一个进程,进程id为1,也是系统所有进程的父进程。

inittab:
init进程的配置文件,由若干条指令组成。文件描述在系统引导及通常的操作期间, 都启动哪些进程 (比如/etc/init.d/boot, /etc/init.d/rc, getty 等等)。


inittab文件内容解析:
1、每一个条目有如下的格式:
id:runlevels:action:process
共四个字段,由冒号隔开,每个字段的意义和取值如下:

-->id:inittab文件中条目的唯一标识
限于1-4 个任意字符构成的字符串 (如果是用版本号小于 5.2.18 或a.out 的库编译生成的 sysvinit程序, 则仅限于 2 个字符).
###对于getty或mingetty等其他login程序项,要求id与tty的编号相同,否则getty程序将不能正常工作。
某些特定的标签是常用的,在Red Hat Linux中使用的标签是:
  id 用来定义缺省的init运行的级别
  si 是系统初始化的进程
  ln 其中的n从1~6,指明该进程可以使用的runlevel的级别
  ud 是升级进程
  ca 指明当按下Ctrl+Alt+Del时运行的进程
  pf 指当UPS表明断电时运行的进程
  pr 是在系统真正关闭之前,UPS发出电源恢复的信号时需要运行的进程
  x 是将系统转入X终端时需要运行的进程

-->runlevels:列出发生指定动作的运行级

可以取0至6.

进行级别:

Runlevel 0: 是让init关闭所有进程并终止系统。
Runlevel 1: Single模式,是用来将系统转到单用户模式,单用户模式只能有系统管理员进入,在该模式下处理那些在有登录用户的情况下不能进行更改的文件
Runlevel 2: 是允许系统进入多用户的模式,但并不支持文件共享,这种模式很少应用。
Runlevel 3: 是最常用的运行模式,主要用来提供真正的多用户模式,也是多数服务器的缺省模式。
Runlevel 4: 一般不被系统使用,用户可以设计自己的系统状态并将其应用到runlevel 4阶段,尽管很少使用,但使用该系统可以实现一些特定的登录请求。
Runlevel 5: 是将系统初始化为专用的X Window终端。对功能强大的Linux系统来说,这并不是好的选择
Runlevel 6: 是关闭所有运行的进程并重新启动系统。


-->action:描述要发生的动作
respawn 重生的意思,指该进程只要终止就立即重新启动 (如 getty).
wait 只要进入指定的运行级就启动本进程, 并且init将等待其返回
once 只要进入指定的运行级就启动一次本进程.
boot 在系统引导期间执行本进程. <runlevels 域被忽略>
bootwait 在系统引导期间执行本进程. 并且init等待该进程的结束( 如/etc/rc). <runlevels 域被忽略>
off 禁止进入,因此该进程不运行
ondemand 当系统指定特定的运行级别A、B、C时运行
initdefault 不要执行这个进程,它用于设置系统引导完成后进入的运行级, 如果不存在这样的条目, init 就会在控制台询问要进入的运行级. <process 域被忽略>
sysinit 系统引导期间执行此进程. 本进程会在boot 或bootwait 条目之前得到执行. <runlevels 域被忽略>
powerwait 当init收到SIGPWR信号时运行,通常在有进程把 UPS 和计算机相连时通知
init 进程, Init 在继续其它工作之前要等待此进程结束.
powerfail 类似 powerwait, 但是init 不等待此进程完成.
powerokwait 在init 收到电源已经恢复的通知后立即执行此进程.
powerfailnow 本进程在 init 被告知 UPS 电源快耗尽同时外部电源失败 (无效) 时被执行. (假设 UPS 和监视进程能够发现这样的情况).
ctrlaltdel 当Ctrl+Alt+Del三个键同时按下时运行,把SIGINT信号发送给init。<忽略runlevel> 
kbrequest 本进程在 init 收到一个从控制台键盘产生的特殊组合按键信号时执行.

-->process:进行的进程
该进程采用的格式与在命令行下运行该进程的格式一样,因此process字段都以该进程的名字开头,紧跟着是运行时要传递给该进程的参数。
如果 process 域以一个‘+’开头, init 不会在utm和wtmp文件中为此进程记帐.


2、init加载步骤:
1> si::sysinit:/etc/rc.d/rc.sysinit
它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,
rc.sysinit是每一个运行级别都要首先运行的重要脚本。它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。

2>在rc.sysinit执行后,将返回init继续其它的动作,通常接下来会执行/etc/rc.d/rc启动对应运行级别的守护程序。

以运行级别5为例,init将执行配置文件inittab中的以下这行:
l5:5:wait:/etc/rc.d/rc 5

这一行表示以5为参数运行/etc/rc.d/rc,/etc/rc.d/rc是一个Shell脚本,它接受5作为参数,去执行/etc /rc.d/rc5.d/目录下的所有的rc启动脚本,/etc/rc.d/rc5.d/目录中的这些启动脚本实际上都是一些链接文件(chkconfig命令就是通过修改这些符号连接从而实现修改服务的运行级别),而不是真正的rc 启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。


3> 建立终端

rc执行完毕后,返回init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。
init接下来会打开6个终端,以便用户登录系统。通过按Alt+Fn(n对应1-6)可以在这6个终端中切换。
在inittab中的以下6行就是定义了6个终端:
x:2345:respawn:/sbin/mingetty ttyx

4> 登录系统,启动完成
0 0
原创粉丝点击