Manpages

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 [AT] cistron.nl) 原 始 幫 助 手 冊 頁 作 者 : Michael Haardt (u31b3hs [AT] pool.de).

另 見

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

[中 文 版 維 護 人 ]

所 羅 門 <solomen [AT] email.cn>

[中 文 版 最 新 更 新 ]

2000/11/26

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

http://cmpp.linuxforum.net