linux初始化程序init分析

2021-05-26 06:42:52 字數 2274 閱讀 3831

1、init程序

init程序,是乙個由核心啟動的使用者級程序,核心自行啟動後,就通過啟動 init來完成引導程序。所以,init始終是第乙個程序(其程序編號始終為1)。init程式位於/sbin/init,如果核心找不到init,就會嘗試執行/bin/sh;

2、執行級別

執行級就 是作業系統當前正在執行的功能級別。這個級別從1到6 ,具有不同的功能。

3、inittab檔案

linux系統在/etc/inittab檔案中配置執行級別,供init程序呼叫。預設首先會啟動位於/etc/rc.d/init.d目錄中的指令碼,這些指令碼被「ln」命令連線到 /etc/rc.d/rcn.d 目錄(啟動n表示0-6的執行級別)。inittab檔案所包含的域具有嚴格的格式。該檔案中每個條目的格式為:

id:rstart:action:process:

其中,id域是相應程序的唯一標識。rstart域所包含的數字表示執行該程序的級別。action域告訴init程序如何對待 process所對應的程序。這裡可以有很多種動作,但是最常見的是wait和respawn,wait意味著當程序啟動後等待它結束,respawn則意 味著如果該程序不存在,則啟動相應的程序,如果它存在,那麼只要它一掉下來就立即重新啟動它。process域包含了實際要執行的命令。

4、rcn目錄

snnn.script_name

knnn.script_name

其 中,

s:代表啟動相應的程序,k:代表殺死相應的程序。nn:是00至99的兩位數字,不過在有些系統中是000至999三位數字。 在不同目錄中的鏈結應採用同一數字。例如,如果某個服務在rc3.d中啟動時名為s45.myscript,那麼如果希望它在rc2.d中啟動,應當使用 鏈結名s45.myscript。script_name:相應指令碼的檔名,根據所在作業系統的不同,它們可能位於下列目錄中:/usr/sbin/init.d、/etc/rc.d、/etc/init.d。

當 init程序呼叫相應的執行級別指令碼時,殺程序按照從高到低的k序號進行,即k23.myscript -> k12.named;而啟動程序按照從低到高的序號進行。

5、自定義啟動服務

建立啟動服務可以通過以下3中方法實現:

1).建立啟動服務指令碼

建立啟動指令碼必須符合以下條件:

例如現在將要啟動、停止乙個名為rc.audit的服務,該服務執行於級別3,停止於級別6。通過檢視rcn.d中的條目,我 們發現序號35空閒,於是就使用該序號(實際上,系統並不對使用已占用的序號作任何檢查)。

假定該指令碼已經通過了測試,它能夠正確地啟動 和停止。現在我們把該指令碼放置在相應的執行級別目錄中。

在本系統中,rcn.d目錄位於/etc/rc.d目錄下,而我的執行級別指令碼儲存在/etc/rc.d/init.d目錄下(如果系統目錄結構與上面的不同,那麼需要對下面的命令作相應的調整)。

$pwd

/etc/rc.d/rc3.d

$ln -s /init.d/rc.audit s35rc.audit

$ls -l

lrwxrwxrws 1 root root s35rc.audit -> /init.d/rc.audit

$pwd

/etc/rc.d/rc6.d

$ln -s /init.d/rc.audit k35rc.audit

$ls -l

lrwxrwxrwx 1 root root k35rc.audit -> /init.d/rc.audit

2).inittab啟動

我們還可以通過在inittab檔案中加入相應的條目來做到這一點。

上面的一條意思是:

行首的rc.audit是該程序在執行級別3中的唯一標識,該程序只執行一次,所要執行的指令碼是/usr/local/etc/rc.audit。

3).rc.local啟動

如果不想把/etc/inittab檔案弄得過於雜亂,還有其他的方法可以實現啟動和停止服務的功能。大多數系統都含有乙個名為rc.local的檔案, 一般來說也是位於/etc目錄下。該指令碼檔案將在inittab和執行級別指令碼之後執行。可以在該檔案中加入任何命令,或從中呼叫最習慣用的啟動指令碼。有 些系統還在/bin目錄下(更多的是在/usr/sbin目錄下)含有乙個名為shutdown的指令碼檔案,可以使用它來關閉某些服務。

linux初始化系統init

linux從bios開始啟動,然後載入記憶體映像到記憶體,進行記憶體初始化,核心初始化的最後一步是啟動乙個pid為1的init的程序!他負責載入啟動別的程序。對應的啟動指令碼都在 etc init.d下。init是序列化啟動,啟動較慢!init的管理 etc init.d deamon start,...

初始化函式, init

用於聯絡的 來自 class cat def init self,color self.color color defeat self print chi def printinfo self print self.color xiaoqiang cat white xiaoqiang.eat xi...

核心初始化優化巨集 ,初始化順序, init,

來自 http www.17xie.com read 54054.html 核心使用了大量不同的巨集來標記具有不同作用的函式和資料結構。如巨集 init devinit 等。這些巨集在include linux init.h 標頭檔案中定義。編譯器通過這些巨集可以把 優化放到合適的記憶體位置,以減少...