1. inittab基本概念
a) init進程:
- Linux在完成核內引導(內核鏡像已被載入內存,開始運行,並已初始化所有的設備驅動程序和數據結構等)之后,接着通過啟動一個用戶級程序init來啟動其他用戶級的進程或服務.
- init始終是系統的第一個進程,其PID始終為1(ps -aux | less),它是系統所有進程的父進程.
- 內核會查詢init所在的位置,在Linux系統中存儲在/sbin/init.如果內核找不到init,它就會試着運行/bin/sh,如果運行失敗,系統的啟動也會失敗.(存儲位置如下所示):
b) inittab文件:
- init程序需要讀取配置文件/etc/inittab來作為進程運行的參數.
- inittab是一個不可執行的文本文件,它有若干行指令所組成.

1 # /etc/inittab: init(8) configuration. 2 # $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $ 3 4 # The default runlevel. 5 id:5:initdefault: 6 7 # Boot-time system configuration/initialization script. 8 # This is run first except when booting in emergency (-b) mode. 9 si::sysinit:/etc/init.d/rcS 10 11 # What to do in single-user mode. 12 ~~:S:wait:/sbin/sulogin 13 14 # /etc/init.d executes the S and K scripts upon change 15 # of runlevel. 16 # 17 # Runlevel 0 is halt. 18 # Runlevel 1 is single-user. 19 # Runlevels 2-5 are multi-user. 20 # Runlevel 6 is reboot. 21 22 l0:0:wait:/etc/init.d/rc 0 23 l1:1:wait:/etc/init.d/rc 1 24 l2:2:wait:/etc/init.d/rc 2 25 l3:3:wait:/etc/init.d/rc 3 26 l4:4:wait:/etc/init.d/rc 4 27 l5:5:wait:/etc/init.d/rc 5 28 l6:6:wait:/etc/init.d/rc 6 29 # Normally not reached, but fallthrough in case of emergency. 30 z6:6:respawn:/sbin/sulogin 31 #S:2345:respawn:/sbin/getty 115200 ttyO0 32 S:2345:respawn:/sbin/getty 115200 ttyPS0 33 # /sbin/getty invocations for the runlevels. 34 # 35 # The "id" field MUST be the same as the last 36 # characters of the device (after "tty"). 37 # 38 # Format: 39 # <id>:<runlevels>:<action>:<process> 40 # 41 1:2345:respawn:/sbin/getty 38400 tty1
2. inittab文件格式
/etc/inittab文件中每個登記項的結構都是一樣的,共分為以冒號“:”分隔的4個字段.具體如下:
<id>:<runlevels>:<action>:<process>
其中,各字段以及與其相關的說明如下:
identifier: 登記項標識符,最多為4個字符.用於惟一地標識/etc/inittab文件中的每一個登記項。
run_level:系統運行級,即執行登記項的init級別.用於指定相應的登記項適用於哪一個運行級,即在哪一個運行級中被處理.如果該字段為空,那么相應的登記項將適用於所有的運行級.在該字段中,可以同時指定一個或多個運行級,其中各運行級分別以數字0.1.2.3.4.5.6或字母a、b、c表示,且無需對其進行分隔。
action: 動作關鍵字.用於指定init(M)命令或進程對相應進程(在“process”字段定義)所實施的動作.具體動作包括:
- boot:只有在引導過程中,才執行該進程,但不等待該進程的結束;當該進程死亡時,也不重新啟動該進程.
- bootwait:只有在引導過程中,才執行該進程,並等待進程的結束:當該進程死亡時,也不重新啟動該進程.實際上,只有在系統被引導后,並從單用戶方式進入多用戶方式時,這些登記項才被處理;如果系統的默認運行級設置為2(即多用戶方式),那么這些登記項在系統引導后將馬上被處理.
- initdefault:指定系統的默認運行級.系統啟動時,init將首先查找該登記項.如果存在init將據此決定系統最初要進入的運行級.具體來說,init將指定登記項“run_level"字段中的最大數字(即最高運行級)為當前系統的默認運行級;如果該字段為空,那么將其解釋為“0123456”,並以“6”作為默認運行級.如果不存在該登記項,那么init將要求用戶在系統啟動時指定一個最初的運行級.
- off:如果相應的進程正在運行,那么就發出一個警告信號,等待20秒后,再通過殺死信號強行終止該進程.如果相應的進程並不存在那么就忽略該登記項.
- once:啟動相應的進程,但不等待該進程結束便繼續處理/etc/inittab文件中的下一個登記項;當該進程死亡時,init也不重新啟動該進程.注意:在從一個運行級進入另一個運行級時,如果相應的進程仍然在運行,那么init就不重新啟動該進程.
- ondemand:與“respawn”的功能完全相同,但只用於運行級為a、b或c的登記項.
- powerfail:只在init接收到電源失敗信號時執行相應的進程,但不等待該進程結束.
- powerwait:只在init接收到電源失敗信號時執行相應的進程,並在繼續對/etc/inittab文件進行任何處理前等待該進程結束.
- respawn:如果相應的進程還不存在,那么init就啟動該進程,同時不等待該進程的結束就繼續掃描/etc/inittab文件;當該進程死亡時,init將重新啟動該進程.如果相應的進程已經存在,那么init將忽略該登記項並繼續掃描/etc/inittab文件.
- sysinit:只有在啟動或重新啟動系統並首先進入單用戶時,init才執行這些登記項.而在系統從運行級1-6進入單用戶方式時,init並不執行這些登記項."action”字段為“sysinit”的登記項在“run_level”字段不指定任何運行級.
- wait:啟動進程並等待其結束,然后再處理/etc/inittab文件中的下一個登記項.
process: 所要執行的shell命令.任何合法的shell語法均適用於該字段.
3. Reference