Chinaunix首页 | 论坛 | 博客
  • 博客访问: 246040
  • 博文数量: 41
  • 博客积分: 1523
  • 博客等级: 上尉
  • 技术积分: 579
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-05 21:23
文章分类

全部博文(41)

文章存档

2014年(1)

2013年(2)

2012年(1)

2011年(2)

2010年(3)

2009年(1)

2008年(20)

2007年(11)

分类: LINUX

2009-02-04 14:11:36

init是Linux系统操作中不可缺少的程序之一。 是一个由内核启动的用户级进程。 
内核启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式来启动其他用户级的进程或服务。所以,init始终是第一个进程,其PID始终为1。
 
内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。 

init 的主要配置文件是 /etc/inittab
 
inittab文件中每一记录都从新的一行开始,每个记录项最多可有512个字符,每一项的格式通常如下:

id:rstate:action:process

1.id字段是最多4个字符的字符串,用来唯一标志表项。

2.rstate(run state)字段定义该记录项被调用时的运行级别,rstate可以由一个或多个运行级别构成,也可以是空,空则代表运行级别0~6。当请求init改变 运行级别时,那些rstate字段中不包括新运行级别的进程将收到SIGTERM警告信号,并且最后被杀死;只有a、b、c启动的命令外(a、b、c不是 真正的运行级别)

3.action字段告诉init执行的动作,即如何处理process字段指定的进程,action字段允许的值及对应的动作分别为:
    respawn:
    如果process字段指定的进程不存在,则启动该进程,init不等待处理结束,而是继续扫描inittab文件中的后续进程,当这样的进程终止时,init会重新启动它,如果这样的进程已存在,则什么也不做。
    wait:
    启动process字段指定的进程,并等到处理结束才去处理inittab中的下一记录项。
    once:
    启动process字段指定的进程,不等待处理结束就去处理下一记录项。当这样的进程终止时,也不再重新启动它,在进入新的运行级别时,如果这样的进程仍在运行,init也不重新启动它。
    boot:
    只有在系统启动时,init才处理这样的记录项,启动相应进程,并不等待处理结束就去处理下一个记录项。当这样的进程终止时,系统也不重启它。
    bootwait:
    系统启动后,当第一次从单用户模式进入多用户模式时处理这样的记录项,init启动这样的进程,并且等待它的处理结束,然后再进行下一个记录项的处理,当这样的进程终止时,系统也不重启它。
    powerfail:
    当init接到断电的信号(SIGPWR)时,处理指定的进程。
    powerwait:
    当init接到断电的信号(SIGPWR)时,处理指定的进程,并且等到处理结束才去检查其他的记录项。
    off:
    如果指定的进程正在运行,init就给它发SIGTERM警告信号,在向它发出信号SIGKILL强制其结束之前等待5秒,如果这样的进程不存在,则忽略这一项。
    ondemand:
    功能通respawn,不同的是,与具体的运行级别无关,只用于rstate字段是a、b、c的那些记录项。
    sysinit:
    指定的进程在访问控制台之前执行,这样的记录项仅用于对某些设备的初始化,目的是为了使init在这样的设备上向用户提问有关运行级别的问题,init需要等待进程运行结束后才继续。
    initdefault:
    指定一个默认的运行级别,只有当init一开始被调用时才扫描这一项,如果rstate字段指定了多个运行级别,其中最大的数字是默认的运行级别,如果 rstate字段是空的,init认为字段是0123456,于是进入级别6,这样便陷入了一个循环,如果inittab文件中没有包含 initdefault的记录项,则在系统启动时请求用户为它指定一个初始运行级别
 
4.Process字段中进程可以是任意的守候进程、可执行脚本或程序。

运行级就是操作系统当前正在运行的功能级别。这个级别从1到6,具有不同的功能。其功能级别如下:
 # 0 - 停机(千万不能把initdefault 设置为0 )
 # 1 - 单用户模式 
 # 2 - 多用户,没有 NFS 
 # 3 - 完全多用户模式(标准的运行级) 
 # 4 - 没有用到 
 # 5 - X11 (xwindow) 
 # 6 - 重新启动
除此之外还有ABC三个运行级别,但在RHLinux中都没有意义。
这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d 目录下的 文件。在大多数的Linux 发行版本中,启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d /rcn.d 目录。(这里的n 就是运行级0-6)

参数 s q a b c u
s 切换到单用户模式
q 重新加载 inittab 文件
a b c 只载入在 runlevel 中有 a b c 的程序。
u 重建自身,并保留状态
另外:在任何时候,可以在文件inittab中添加新的记录项,级别Q/q不改变当前的运行级别,重新检查inittab文件,可以通过命令init Q或init q使init进程立即重新读取并处理文件inittab.
运行级别 
 


阅读(1363) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-09-07 20:47:58

33 33 33 33