Debian

如何在關機、重啟或啟動時列印日誌以顯示?

  • January 23, 2019

眾所周知,當我們重新啟動、關閉或啟動系統時,螢幕上會列印一些消息,下面是一個截圖:

在此處輸入圖像描述

我的系統是 Ubuntu 16.04,我知道上面的這些日誌消息來自 systemd。

據我了解,一個普通的使用者程序可以在螢幕上列印東西,因為系統給了它三個文件描述符:0、1 和 2。我們可以在/proc/<PID>/fd/. 這是一個例子:

root@X86-Xenial-6:~# ls /proc/3467/fd
0  1  2  255

3467是一個 hello-world 程序,我不知道225它是什麼,但我知道它是標準輸入0、標準輸出12標準錯誤。

所以,我有一個問題:當系統開始關機、重啟或啟動時,使用者程序尚未創建或已被銷毀,這意味著/proc/不再存在,在這種情況下012存在.

那麼為什麼來自 systemd 的消息可以列印在螢幕上呢?核心可以列印東西,因為它立即控制螢幕,但我認為systemd不屬於核心,那麼它怎麼能在螢幕上列印東西呢?使用什麼樣的函式或api?

啟動和關閉主要是在使用者空間中進行的,而不是由核心進行的。一旦核心完成初始化,它就會init作為正常程序查找並啟動它,標准文件描述符指向控制台。因此init(在您的情況下,initramfs 腳本,然後是 systemd)可以寫入其標準輸出,並且它寫入的任何內容都將顯示在螢幕上(或控制台輸出配置為顯示的任何位置)。這種情況一直持續到核心關閉或重新啟動,這發生在使用者空間關閉之後(並且在所有關閉日誌都已寫入控制台之後)。

順便說一句,請注意這/proc只是訪問核心維護的某些資訊的一種方式;/proc無論是否安裝,這些資訊都存在。

還要注意

眾所周知,當我們重新啟動、關閉或啟動系統時,螢幕上會列印一些資訊

不一定正確——許多系統現在啟動和關閉時不顯示日誌,所以我們不能假設“我們都知道”。

引用自:https://unix.stackexchange.com/questions/496127