/etc/inittab文件 发信人: cloudsky (晓舟·轩辕明月), 信区: Linux 标 题: /etc/inittab文件简介 发信站: 武汉白云黄鹤站 (Thu Feb 4 22:29:31 1999) , 站内信件
init进程就是所谓1号进程,用ps -jfl -p 1就可以看到全貌。init在启动中会读取/etc/inittab,处理如下:
1. 查找initdefault项,存在则以相应运行级启动,不存在系统将要求输入运行级,若输入S或s将进入单用户状态。
2. 启动后,若系统首次进入除单用户以外的其他状态,init将在/etc/inittab中查找boot或bootwait项,存在则启动相关进程,然后再启动当前运行级下的其他进程。
3. init创建完所有子进程后进入循环等待,并不消亡。init q或者telinit Q将导致init重新读取/etc/inittab文件
4. 虚拟运行级a、b、c必须通过init a直接启动相关进程,不会改变当前运行级,这种进程在系统切换运行级时不会被终止,只有遇到下列情况才被终止:
a. 该项action域被标记为OFF b. 该项被删除 c. 进入单用户状态
5. 运行级 0 停机;shutdown实际上最后做了init 0
1 系统管理状态;若从常规运行级进入本运行级,不终止任何服务和进程,所以没有意义。只有从S级进入才有意义。S或s 单用户状态;最严格状态,与系统之间只能通过主控台进行交互。
6 正常停机并重新启动,进入initdefault项指定的运行级a、b、c 虚拟运行级,用于在不改变当前运行级的情况下启动进程Q或q 通过init q引起对/etc/inittab的重新检测
6. 文件每行的格式
id:rstate:action:process id 两个字符,不得重复 rstate 该项应该被处理的运行级;可以指定多个运行级,0-6任意组合。为空表示所有运行级。切换运行级时,init会检查所有进程,如果进程相关rstate域中无新运行级,该进程收到SIGTERM信号,5秒后被强行终止。 action respawn 进程不存在就启动,启动进程后不等待进程终止。一旦进程终止就再次启动。 进程已经存在则继续扫描/etc/inittab文件 wait 如果系统正在进入的运行级在该项的rstate域已经指定,则启动该进程,并等待进程终止。 以后再次扫描/etc/inittab时,若运行级没有改变,则忽略本项。 once 如果系统正在进入的运行级在该项的rstate域已经指定,则启动该进程,但不等待进程终 止。进程终止后也不再次启动。切换到新运行级时,若该进程已经存在,也不再重新启动它。 boot 只在系统启动过程中被处理。启动进程后不等待进程终止,进程终止后也不再次启动它。 当这里指定boot时,相关rstate应该设置成系统缺省实际运行级。该项主要用于冷启动 bootwait 系统启动后首次从单用户切换到常规运行级时被处理。启动进程并等待进程终止。 powerfail 当系统接收到掉电信号时启动相关进程powerwait 当系统接收到掉电信号时启动相关进程, 并等待进程终止,在进程终止前不做任何其它操作。 off 若该项相关进程已经存在则强行终止,否则忽略。 ondemand 功能同respawn,但只用于虚拟运行级 initdefault 只在系统首次启动init时被处理。注意,如果rstate为空,等同于将rstate指定为0123456, 此时init将引导系统进入最高运行级,实际上就是init 6,其结果是系统无休止的重启动。 另外,如果对应的rstate设置成0或者1,将导致系统无法正常启动,切记。 sysinit 在系统激活主控台前执行(即主控台显示login:提示之前),并等待进程终止,一般用于设备初始化。 process 格式遵从sh语法
下面是solaris2.5.1下的一个示例文件
ap::sysinit:/sbin/autopush -f /etc/iu.ap fs::sysinit:/sbin/rcS >/dev/console 2>&1 </dev/console is:3:initdefault: p3:s1234:powerfail:/usr/sbin/shutdown -y -i5 -g0 >/dev/console 2>&1 s0:0:wait:/sbin/rc0 >/dev/console 2>&1 </dev/console s1:1:wait:/usr/sbin/shutdown -y -iS -g0 >/dev/console 2>&1 </dev/console s2:23:wait:/sbin/rc2 >/dev/console 2>&1 </dev/console s3:3:wait:/sbin/rc3 >/dev/console 2>&1 </dev/console s5:5:wait:/sbin/rc5 >/dev/console 2>&1 </dev/console s6:6:wait:/sbin/rc6 >/dev/console 2>&1 </dev/console fw:0:wait:/sbin/uadmin 2 0 >/dev/console 2>&1 </dev/console of:5:wait:/sbin/uadmin 2 6 >/dev/console 2>&1 </dev/console rb:6:wait:/sbin/uadmin 2 1 >/dev/console 2>&1 </dev/console sc:234:respawn:/usr/lib/saf/sac -t 300 co:234:respawn:/usr/lib/saf/ttymon -g -h -p "`uname -n` \ console login: " -T sun -d /dev/console -l console -m ldterm,ttcompat
一个修改/etc/inittab的实例
假设/dev/tty00是个串口,想在这个串口上挂一个终端
1. 用RS232标准串行线连接串口和终端,终端上电,设置终端参数9600 7 偶校验
2. 主机上电,root注册,修改/etc/inittab,增加一行
00:23:respawn:/sbin/getty tty00 9600
3. init q
|