歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> init進程和inittab文件的簡要說明

init進程和inittab文件的簡要說明

日期:2017/3/6 15:51:24   编辑:關於Unix
init進程是系統中所有進程的父進程,init進程繁衍出完成通常操作所需的子進程,這些操作包括:設置機器名、檢查和安裝磁盤及文件系統、啟動系統日志、配置網絡 接口並啟動網絡 和郵件服務,啟動打印服務等。Solaris中init進程的主要任務是按照inittab文件所
  init進程是系統中所有進程的父進程,init進程繁衍出完成通常操作所需的子進程,這些操作包括:設置機器名、檢查和安裝磁盤及文件系統、啟動系統日志、配置網絡接口並啟動網絡和郵件服務,啟動打印服務等。Solaris中init進程的主要任務是按照inittab文件所提供的信息創建進程,由於進行系統初始化的那些進程都由init創建,所以init進程也稱為系統初始化進程。下面具體說明inittab文件的格式。
  inittab文件中每一記錄都從新的一行開始,每個記錄項最多可有512個字符,每一項的格式通常如下:id:rstate:action:process,下面分別解釋。
  
  1.id字段是最多4個字符的字符串,用來唯一標志表項。
  2.rstate(run state)字段定義該記錄項被調用時的運行級別,rstate可以由一個或多個運行級別構成,也可以是空,空則代表運行級別0~6。當請求init改變運行級別時,那些rstate字段中不包括新運行級別的進程將收到SIGTERM警告信號,並且最後被殺死;只有a、b、c啟動的命令外(a、b、c不是真正的運行級別)
  3.action字段告訴init執行的動作,即如何處理process字段指定的進程,action字段允許的值及對應的動作分別為:
  1)respawn:如果process字段指定的進程不存在,則啟動該進程,init不等待處理結束,而是繼續掃描inittab文件中的後續進程,當這樣的進程終止時,init會重新啟動它,如果這樣的進程已存在,則什麼也不做。
  2)wait:啟動process字段指定的進程,並等到處理結束才去處理inittab中的下一記錄項。
  3)once:啟動process字段指定的進程,不等待處理結束就去處理下一記錄項。當這樣的進程終止時,也不再重新啟動它,在進入新的運行級別時,如果這樣的進程仍在運行,init也不重新啟動它。
  4)boot:只有在系統啟動時,init才處理這樣的記錄項,啟動相應進程,並不等待處理結束就去處理下一個記錄項。當這樣的進程終止時,系統也不重啟它。
  5)bootwait:系統啟動後,當第一次從單用戶模式進入多用戶模式時處理這樣的記錄項,init啟動這樣的進程,並且等待它的處理結束,然後再進行下一個記錄項的處理,當這樣的進程終止時,系統也不重啟它。
  6)powerfail:當init接到斷電的信號(SIGPWR)時,處理指定的進程。
  7)powerwait:當init接到斷電的信號(SIGPWR)時,處理指定的進程,並且等到處理結束才去檢查其他的記錄項。
  8)off:如果指定的進程正在運行,init就給它發SIGTERM警告信號,在向它發出信號SIGKILL強制其結束之前等待5秒,如果這樣的進程不存在,則忽略這一項。
  9)ondemand:功能通respawn,不同的是,與具體的運行級別無關,只用於rstate字段是a、b、c的那些記錄項。
  10)sysinit:指定的進程在訪問控制台之前執行,這樣的記錄項僅用於對某些設備的初始化,目的是為了使init在這樣的設備上向用戶提問有關運行級別的問題,init需要等待進程運行結束後才繼續。
  11)initdefault:指定一個默認的運行級別,只有當init一開始被調用時才掃描這一項,如果rstate字段指定了多個運行級別,其中最大的數字是默認的運行級別,如果rstate字段是空的,init認為字段是0123456,於是進入級別6,這樣便陷入了一個循環,如果inittab文件中沒有包含initdefault的記錄項,則在系統啟動時請求用戶為它指定一個初始運行級別
  4.Process字段中進程可以是任意的守候進程、可執行腳本或程序。
  另外:在任何時候,可以在文件inittab中添加新的記錄項,級別Q/q不改變當前的運行級別,重新檢查inittab文件,可以通過命令init Q或init q使init進程立即重新讀取並處理文件inittab.

Copyright © Linux教程網 All Rights Reserved