linux初始化進程init分析__linux

來源:互聯網
上載者:User

1、init進程

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

 

2、運行層級

運行級就 是作業系統當前正在啟動並執行功能層級。這個層級從1到6 ,具有不同的功能。 0 – 停機(千萬不能把initdefault 設定為0 ) 1 – 單一使用者模式 2 – 多使用者,沒有 NFS 3 – 完全多使用者模式(標準的運行級) 4 – 沒有用到 5 – X11 (xwindow) 6 – 重新啟動 (千萬不要把initdefault 設定為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目錄

rcn.d目錄中的指令碼都是一些連結,這樣是為了省去不必要的副本。這些連結的格式為:

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).建立啟動服務指令碼

建立啟動指令碼必須符合以下條件: 編寫該指令碼,確保它符合調用標準。 確信它能夠啟動或終止相應的服務。 將該指令碼放置於(取決於作業系統) /etc/init.d或/usr/sbin/init.d或/etc/rc.d中。 在相應的rcN.d目錄中按照合理的命名方式建立連結。

例如現在將要啟動、停止一個名為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檔案中加入相應的條目來做到這一點。 首先我確定該指令碼能夠正確運行 對inittab檔案做備份。$ cp /etc/initab /etc/inittab.bak 編輯inittab檔案,在該檔案末尾加入這樣一個條目:rc.audit:3:once:/usr/local/etc/rc.audit,儲存並退出。

上面的一條意思是:
行首的rc.audit是該進程在運行層級3中的唯一標識,該進程只運行一次,所要啟動並執行指令碼是/usr/local/etc/rc.audit。

3).rc.local啟動

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.