如何在 Linux 中確定運(yùn)行的是那種初始化系統(tǒng)
首個(gè)進(jìn)程在你啟動(dòng) Linux 發(fā)行版時(shí)開(kāi)始運(yùn)行,它稱(chēng)為初始化進(jìn)程 init(初始化initialization的縮寫(xiě))。它的進(jìn)程標(biāo)識(shí)符為 1(即 pid=1)。基于 Unix 的系統(tǒng)中的所有進(jìn)程和應(yīng)用程序都是這個(gè)初始化進(jìn)程的后代。
根據(jù)功能和特性,存在不同類(lèi)型的初始化進(jìn)程。例如,??systemd??、Runit、OpenRC、sysVinit 等。其中,systemd 是最流行和最現(xiàn)代的一種,被包括 Ubuntu 和 Fedora 在內(nèi)的所有現(xiàn)代 Linux 發(fā)行版使用和采用。
與傳統(tǒng)的基于 Unix 的初始化系統(tǒng)相比,systemd 及其性能一直存在爭(zhēng)議。但這就是另外一個(gè)話題了。
讓我們看看如何確定在 Linux 發(fā)行版中運(yùn)行的是 systemd 還是其它初始化系統(tǒng)。
systemd 還是其它初始化系統(tǒng)?
不幸的是,沒(méi)有直接的命令可以找到它。你可以從初始化進(jìn)程追溯它,它基本上是到 ??/sbin/init?
? 的符號(hào)鏈接,即 pid=1。
使用 ??strings?? 命令打印嵌入在二進(jìn)制文件 ??/sbin/init?
? 中的文本并使用以下命令搜索 ??init?
?:
示例 1
在下面的輸出中,它是一個(gè)運(yùn)行 Debian(Peppermint OS)的 sysVinit 系統(tǒng)。如你所見(jiàn),它清楚地顯示了 ??init?
? 進(jìn)程名稱(chēng)。
顯示使用 sysVinit 而不是 systemd 的示例
如果在上述同一個(gè)系統(tǒng)中找 ??systemd?
?,那么不會(huì)有任何結(jié)果。因此,你可以得出結(jié)論,你正在運(yùn)行 sysVinit 而不是 systemd。
示例 2
如果你在 systemd 系統(tǒng)中運(yùn)行上述命令,你可以在輸出的第一行輕松看到 systemd 及其版本。
顯示它使用 systemd 的示例
示例 3
你也可以嘗試使用 ??pstree?
? 命令打印進(jìn)程樹(shù),它應(yīng)該會(huì)顯示第一個(gè)進(jìn)程名稱(chēng)。它應(yīng)該是 ??systemd?
? 或 ??init?
?,如下例所示。
pstree 顯示使用 systemd
pstree 顯示使用 init
這就好了。這樣你就可以輕松找出你的發(fā)行版是使用 systemd 還是其他的。