init(爲英語:initialization的簡寫)是 Unix 和 類Unix 系統中用來產生其它所有進程的程序。它以守護進程的方式存在,其進程號爲1。
所謂的init進程,它是一個由內核啓動的用戶級進程。
內核自行啓動(已經被載入內存,開始運行,並已初始化所有的設備驅動程序和數據結構等)之後,就通過啓動一個用戶級程序init的方式,完成引導進程。所以init始終是第一個進程(其進程編號始終爲1)。
內核會在過去曾使用過init的幾個地方查找它,它的正確位置(對Linux系統來說)是/sbin/init。如果內核找不到init,它就會試着運行/bin/sh,如果運行失敗,系統的啓動也會失敗。
BSD風格
BSD init 運行存放於'/etc/rc'的初始化 shell 腳本,然後啓動基於文本模式的終端(getty)或者基於圖形界面的終端(窗口系統,如 X)。 這裏沒有運行模式的問題,因爲文件 'rc' 決定了 init 如何執行。
優點: 簡單且易於手動編輯。
缺點: 如果第三方軟件需要在啓動過程執行它自身的初始化腳本,它必須修改已經存在的啓動腳本,一旦這種過程中有一個小錯誤,都將導致系統無法正常啓動。
值得注意的是,現代的 BSD 派生系統一直支持使用 'rc.local' 文件的方式,它將在正常啓動過程接近最後的時間以子腳本的方式來執行。這樣做減少了整個系統無法啓動的風險。然後,第三方軟件包可以將它們獨立的 start/stop 腳本安裝到一個本地的 'rc.d' 目錄中(通常這是由 ports collection/pkgsrc 完成的)。都被分成更小的子腳本,和 SysV 類似。rcorder 通常根據在 rc.d目錄中腳本之間的依賴關係來決定腳本的執行順序。
SysV風格System V init 檢查 '/etc/inittab' 文件中是否含有 'initdefault' 項。 這告訴 init 系統是否有一個默認運行模式。如果沒有默認的運行模式,那麼用戶將進入系統控制檯,手動決定進入何種運行模式。
優點: 靈活性強
缺陷: 比較複雜
其他風格
很多人一直努力地從某些方面改進傳統的 init 守護進程,使它變得更完善。下面列出的是一些改進,沒有特別的順序:
SystemStarter, 用來替代 launchd — Apple Mac OS X開啓進程
Initng, 完全代替 init ,可以異步開啓進程
Upstart, 完全代替 init ,可以異步開啓進程 由Ubuntu使用
Service Management Facility, 完全代替/重新設計 Solaris 啓動 Solaris 10
runit, 跨平臺的完全代替 init 可以並行啓動服務
BootScripts, GoboLinux
Mudur, 用 Python 寫成的 init 替代品, 可以異步開啓進程,Pardus Linux 發行版
systemd, 完全替代init,可並行啓動服務,並能減少在shell上的系統開銷,爲Fedora、ArchLinux所使用
System V中運行模式
Linux用init命令可以實現關機、重啓、切換模式:
System V中運行模式描述了系統各種可能的狀態。通常會有 8 種運行模式,即運行模式 0 到 6 和 S 或者 s。其中運行模式 3 爲"保留的"運行模式:
/etc/inittab
# # inittab This file describes how the INIT process should set up # the system in a certain run-level. # # Author: Miquel van Smoorenburg, <[email protected]> # Modified for RHS Linux by Marc Ewing and Donnie Barnes # # Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault:
0是關機
1是單用戶
2是多用戶,不聯網
3是多用戶
4是不使用的
5是xwindows,也就是有界面的
6是重啓
init命令很簡單。直接輸入init + 你想要的模式 回車就行。
比如 輸入 : init 0 就是關機
init 3 就是切換到多用戶
init 5 就是切換到界面
init 6 就是重啓