Debian
如何在關機、重啟或啟動時列印日誌以顯示?
眾所周知,當我們重新啟動、關閉或啟動系統時,螢幕上會列印一些消息,下面是一個截圖:
我的系統是 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
、標準輸出1
和2
標準錯誤。所以,我有一個問題:當系統開始關機、重啟或啟動時,使用者程序尚未創建或已被銷毀,這意味著
/proc/
不再存在,在這種情況下0
,1
不2
存在.那麼為什麼來自 systemd 的消息可以列印在螢幕上呢?核心可以列印東西,因為它立即控制螢幕,但我認為systemd不屬於核心,那麼它怎麼能在螢幕上列印東西呢?使用什麼樣的函式或api?
啟動和關閉主要是在使用者空間中進行的,而不是由核心進行的。一旦核心完成初始化,它就會
init
作為正常程序查找並啟動它,標准文件描述符指向控制台。因此init
(在您的情況下,initramfs 腳本,然後是 systemd)可以寫入其標準輸出,並且它寫入的任何內容都將顯示在螢幕上(或控制台輸出配置為顯示的任何位置)。這種情況一直持續到核心關閉或重新啟動,這發生在使用者空間關閉之後(並且在所有關閉日誌都已寫入控制台之後)。順便說一句,請注意這
/proc
只是訪問核心維護的某些資訊的一種方式;/proc
無論是否安裝,這些資訊都存在。還要注意
眾所周知,當我們重新啟動、關閉或啟動系統時,螢幕上會列印一些資訊
不一定正確——許多系統現在啟動和關閉時不顯示日誌,所以我們不能假設“我們都知道”。