Provided by: manpages-zh_1.5.2-1.1_all bug

NAME

       init, telinit - 進程處理初始化

總覽

       /sbin/init [ -a ] [ -s ] [ -b ] [ -z xxx ] [ 0123456Ss ]
       /sbin/telinit [ -t  ] [ 0123456sSQqabcUu ]

描述

   Init
       Init  是所有進程的父進程。它的首要任務是從一個存儲在檔案  /etc/inittab (參閱 inittab(5))
       裏面的稿本裏創建進程。 這個檔案通常有一些令 init 在每條使用者可登入的線上派生  getty  的記
       錄. 它同時也控制著各獨特系統所要求的獨立進程。

運行級別

       所謂  運行級別  是一種系統軟體環境配置, 在此特定的環境中只允許某一組選定的進程存在。 init
       給不同的運行級別派生的進程在 /etc/inittab  檔案中定義。  Init  可以啟動到8個不同的運行級別
       上:  0–6Ss。運行級別可以由超級使用者通過 telinit 命令來轉換,此命令可以將轉換信號
       傳遞給 init, 告訴它切換到哪個運行級別。

       運行級別 01,和 6 為系統保留的專用運行級別。 運行級別 0 用來關機,運行級別 6  用來重啟電
       腦,  運行級別 1 用來使電腦進入單使用者模式。 運行級別 S 不是給我們直接使用的, 更多是為進
       入運行級別   1    時運行某些可執行稿本時被調用。    如果想得到更多相關的信息,請參閱手冊頁
       shutdown(8) 和 inittab(5)。

       運行級別 7-9 雖然在文件中說明,但也可以使用。 不使用它們的原因只是因為"傳統" Unix 變種不使
       用這些運行級別。 另外,運行級別 S 和運行級別 s 實際上是相同的, 它們只是系統內同一運行級別
       的兩個不同的別名而己。

系統引導

       當系統核心引導到最後一步時,  init 進程被啟動, 它會自動查找 /etc/inittab 檔案,看看是否有
       類型為 initdefault (參閱 inittab(5))的記錄. initdefault 記錄決定系統初始運行級別。 如果
       沒有這條記錄(或者根本就沒有  /etc/inittab ), 那麼,你必須在系統控制台輸入想要進入的運行
       級別。

       運行級別 Ss 把系統帶入單使用者模式, 此模式不需要 /etc/initttab 檔案。單使用者模式中,
       /sbin/sulogin 會在  /dev/console 這個設備上打開。

       當進入單使用者模式後,  init 會從檔案 /etc/ioctl.save 中讀取控制台的 ioctl(2) 狀態。如果該
       檔案不存在, init 則把線路設定為 9600 baud 並且帶有 CLOCAL。 當 init  退出單使用者模式時,
       它會自當前的控制台的 ioctl 設置存儲到這個檔案供下次使用。

       當第一次進入多使用者模式時,init 會執行bootbootwait 記錄以便在使用者可以登入之前掛載檔
       案系統。 然後再執行相應運指定的各進程。

       當啟動一個新的進程時, init 會檢查是否存在 /etc/initscript 檔案。 如果存在該檔案,則使用該
       稿本來啟動該進程。

       如果系統中存在檔案  /var/run/utmp/var/log/wtmp, 那麼當每個子進程終止時,init 會將終止
       信息和原因記錄進這兩個檔案中。

改變運行級別

init   啟動了所有指定的子進程後,   它會不斷地偵測系統進程情況,如:它的某個子進程被終
       止、電源失效、或由 telinit 發出的改變運行級別的信號。當它接受到以上的這些信號之一時, 它會
       自動重新掃描 /etc/inittab 檔案,並執行相應操作。 所以,新的記錄可以隨時加入到此檔案中。 並
       且,  init 仍然等待系統發出了上述信號。 在更新了各種系統檔案後,如果你希望得到即時的更新,
       你可以使用telinit Qq 命令來喚醒 init 讓它即刻重新檢測/etc/inittab  檔案。

       如果    init    不是在單使用者模式並且接收到了一個電源失效信號(SIGPWR),    它會讀取檔案
       /etc/powerstatus,並執行該檔案中指定的各種操作:

       F(AIL) 電源失效,由 UPS 提供電力。執行 powerwaitpowerfail 記錄。

       O(K)   電源恢復,執行 powerokwait 記錄。

       L(OW)  電源失效並且 UPS 電壓也太低。執行 powerfailnow 記錄。

       如果檔案  /etc/powrestatus  不存在或其中的內容並不包含有以上所示的字母 FOL ,則 init
       會當做讀到了字母 F。

       我們不讚成使用 SIGPWR/etc/powerstatus 。 有些使用者希望與 init  進行交互,那麼可以使用
       /dev/initctl 控制通道。關於此點的描述請參閱 sysvinit 包的原始碼。

       當  init 得到更新運行級別的請求, init會向所有沒有在新運行級別中定義的進程發送一個警告信號
       SIGTERM 。 在等待 5 秒鐘之後,它會發出強制中斷所有進程的運行的信號 SIGKILL 。 注意,  init
       假設所有的這些進程(包括它們的後代)都仍然在  init 最初創建它們的同一進程組裏。 如果有任何
       進程改變了它們的進程組,那麼它就收不到這些信號。 這樣的進程,你需要分別進行手動的終止。

TELINIT

       /sbin/telinit 是一個到 /sbin/init 的軟鏈接。  它用一個單字符參數來通知  init  執行相應的操
       作。 下面是相關的參數:

       0,1,2,3,4,56
              通知 init 將運行級別切換到指定的運行級別

       a,b,c  告訴 init 只運行那些 /etc/inittab 檔案中 運行級別是 abc 的記錄

       Qq 通知 init 重新檢測 /etc/inittab 檔案

       Ss 通知 init 將運行級別切換到單使用者模式下

       Uu 通知 init 自動重啟(保留狀態), 此操作不會對檔案/etc/inittab 進行重新檢測。 執行此
              操作時,運行級別必須處在 Ss12345 之一,否則,該請求將被忽略

       telinit 還可以告訴 init 兩次發送 SIGTERM 和 SIGKILL 信號的時間間隔。 預設值是 5 秒,你可以
       通過使用 -t sec 的選項來修改。

       telinit 只能由具有恰當權限的使用者執行。

       init  通過檢查自己的   進程號  來判斷自己是 init 還是 telinit ;真的 init 的進程號永遠都是
       1。 從這一點來看,我們在調用 telinit 時也可以只使用 init 來少敲幾個鍵.

環境變量

       Init 為所有的子進程設定下列環境變量

       PATH   /usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin

       INIT_VERSION
              如名字表示的那樣.在決定一個稿本是否直接來自 init 時很有用

       RUNLEVEL
              當前系統的運行級別

       PREVLEVEL
              前次運行的運行級別(僅當改變運行級別時有用)

       CONSOLE
              系統控制台。此變量是由核心繼承而來,如果沒有此環境變量的定義,     init      會使用
              /dev/console 做為預設的控制台

啟動標誌

       在啟動系統時可以通過引導管理器(比如,LILO)傳遞一些啟動標誌給 initInit 接受下面幾個:

       -s, S, single
            以單使用者模式啟動系統。按這種模式啟動時, /etc/inittab 需要被檢查, 並在單使用者模式
            shell 啟動之前會執行引導 rc 稿本。

       1-5  定義需要啟動的運行級別

       -b, emergency
            不運行任何啟動稿本而直接進入單使用者模式 shell

       -a, auto
            如果用預設命令行從核心引導(沒有使用者幹預), LILO 引導管理器向命令行增加了單詞 如果
            是這樣的話,  init 把環境變量 請注意你不能將這個東西用於任何安全評測 - 使用者當然可以
            在命令行上 手動輸入

       -z xxx
            -z 參數被忽略.你可以用這個選項略微擴展命令行,  這樣它可以在堆棧裏獲得更多空間.然後
            Init 就可以操作命令行, 好讓 ps(1) 顯示當前運行級別.

接口

       init監聽  /dev 裏的一個 fifo/dev/initctl,從中獲取信息。 Telinit 也使用這些和 init 進行
       通信。 該界面沒有完整的文件。 如果對 init 有興趣,則可以學習 src/ 目錄中 init 源檔案包中的
       initreq.h 檔案。

信號

       init 對以下信號產生響應

       SIGHUP
            當接收到該信號後,init會對 /etc/initrunlvl/var/log/inirunlvl 檔案進行檢查。如果這
            兩個檔案之一存在而且檔案中有 ASCII 字符的運行級別, init 會轉換到相應的新的運行級別。
             此特性只用於向後相容!  . 通常的情況是該檔案並不存在,所以 init 執行類似於
             telinit q 這樣的操作。

       SIGUSR1
            當接收到這個信號量,init 會關閉並重新打開它的控制 fifo,/dev/initctl。 此操作對  /dev
            被重新掛載後的啟動稿本有用。

       SIGINT
            通常,當使用者按了  CTRL-ALT-DEL  鍵後,核心會向  init  傳遞此信號。 它所執行的操作與
            ctrlaltdel 相同。

       SIGWINCH
            當鍵盤有 KeyboardSignal 按鍵按下時,核心向 init 傳遞此信號, 它激活 kbrequest 動作.

遵循

       Init 與 System V 的 init 相相容。 它與/etc/init.d/etc/rc{runlevel}.d  目錄下的稿本緊密
       地工作在一起。 如果你的系統使用這種慣例,在 /etc/init.d 目錄下應該有一個 README 檔案,它可
       以很好地解釋了這些稿本是如何工作的。

相關檔案

       /etc/inittab
       /etc/initscript
       /dev/console
       /etc/ioctl.save
       /var/run/utmp
       /var/log/wtmp
       /dev/initctl

警告

       Init 假設進程和進程的後代同屬於最初創建它們的進程組. 如果進程改變了它們的進程組, init 就
       無法中止它們,因此,你可能會有兩個進程讀取一條終端線.

診斷

       如果 init 發現它的重啟次數在最近 2 分鐘裏超過了 10 次, 它就會認為程式命令串出錯了。在系統
       控制台輸出出錯信息,並拒絕重新啟動, 只有等到 5 分鐘以後或使用者給  init  一個特定的信號,
       它才會重新響應。 這可以防止由於使用者在編輯 /etc/inittab 檔案時可能出現的輸入錯誤 或由於相
       關程式被無意刪除後導致的大量佔用系統資源。

作者

       Miquel    van   Smoorenburg   (miquels@cistron.nl)   原始幫助手冊頁作者:Michael    Haardt
       (u31b3hs@pool.informatik.rwthaachen.de).

另見

       getty(1),  login(1),  sh(1),  who(1),  shutdown(8),  kill(1),  inittab(5),  initscript(5),
       utmp(5)

[中文版維護人]

       所羅門 <solomen@email.com.cn>

[中文版最新更新]

       2000/11/26

[中國 Linux 論壇 man 手冊頁翻譯計劃]

       http://cmpp.linuxforum.net

                                         11 February 2000                                 INIT(8)