Linux中init進程介紹及常用方法

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 就是重啓

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章