首頁 > 軟體

RHCSA 系列(五): RHEL7 中的進程管理:開機,關機

2020-06-16 17:52:54

我們將概括和簡要地複習從你按開機按鈕來開啟你的 RHEL 7 伺服器到呈現出命令列介面的登入螢幕之間所發生的所有事情,以此來作為這篇文章的開始。

Linux 開機過程

請注意:

  1. 相同的基本原則也可以應用到其他的 Linux 發行版本中,但可能需要較小的更改,並且
  2. 下面的描述並不是旨在給出開機過程的一個詳盡的解釋,而只是介紹一些基礎的東西

 

Linux 開機過程

  1. 初始化 POST(加電自檢)並執行硬體檢查;

  2. 當 POST 完成後,系統的控制權將移交給啟動管理器的第一階段(first stage),它儲存在一個硬碟的引導磁區(對於使用 BIOS 和 MBR 的舊式的系統而言)或儲存在一個專門的 (U)EFI 分割區上。

  3. 啟動管理器的第一階段完成後,接著進入啟動管理器的第二階段(second stage),通常大多數使用的是 GRUB(GRand Unified Boot Loader 的簡稱),它駐留在 /boot 中,然後開始載入核心和駐留在 RAM 中的初始化檔案系統(被稱為 initramfs,它包含執行必要操作所需要的程式和二進位制檔案,以此來最終掛載真實的根檔案系統)。

  4. 接著展示了閃屏(splash)過後,呈現在我們眼前的是類似下圖的畫面,它允許我們選擇一個作業系統和核心來啟動:

    啟動選單螢幕

  5. 核心會對接入到系統的硬體進行設定,當根檔案系統被掛載後,接著便啟動 PID 為 1 的進程,這個進程將開始初始化其他的進程並最終呈現給我們一個登入提示符介面。

    注意:假如我們想在啟動後檢視這些資訊,我們可以使用 dmesg 命令,並使用這個系列裡的上一篇文章中介紹過的工具(注:即 grep)來過濾它的輸出。

    登入螢幕和進程的 PID

在上面的例子中,我們使用了大家熟知的 ps 命令來顯示在系統啟動過程中的一系列當前進程的資訊,它們的父進程(或者換句話說,就是那個開啟這些進程的進程)為 systemd(大多數現代的 Linux 發行版本已經切換到的系統和服務管理器):

  1. #ps-o ppid,pid,uname,comm --ppid=1

記住 -o(為 -format 的簡寫)選項允許你以一個自定義的格式來顯示 ps 的輸出,以此來滿足你的需求;這個自定義格式使用 man ps 裡 STANDARD FORMAT SPECIFIERS 一節中的特定關鍵詞。

另一個你想自定義 ps 的輸出而不是使用其預設輸出的情形是:當你需要找到引起 CPU 或記憶體消耗過多的那些進程,並按照下列方式來對它們進行排序時:

  1. #ps aux --sort=+pcpu #%CPU 來排序(增序)
  2. #ps aux --sort=-pcpu #%CPU 來排序(降序)
  3. #ps aux --sort=+pmem #%MEM 來排序(增序)
  4. #ps aux --sort=-pmem #%MEM 來排序(降序)
  5. #ps aux --sort=+pcpu,-pmem #結合%CPU (增序)%MEM (降序)來排列

自定義 ps 命令的輸出

 

systemd 的一個介紹

在 Linux 世界中,很少有能比在主流的 Linux 發行版本中採用 systemd 引起更多的爭論的決定。systemd 的倡導者根據以下事實來表明其主要的優勢:

  1. 在系統啟動期間,systemd 允許並行地啟動更多的進程(相比於先前的 SysVinit,SysVinit 似乎總是表現得更慢,因為它一個接一個地啟動進程,檢查一個進程是否依賴於另一個進程,然後等待守護行程啟動才可以啟動的更多的服務),並且
  2. 在一個執行著的系統中,它用作一個動態的資源管理器。這樣在啟動期間,當一個服務被需要時,才啟動它(以此來避免消耗系統資源)而不是在沒有一個合理的原因的情況下啟動額外的服務。
  3. 向後相容 sysvinit 的指令碼。

    另外請閱讀: 'init' 和 'systemd' 背後的故事

systemd 由 systemctl 工具控制,假如你了解 SysVinit,你將會對以下的內容感到熟悉:

  • service 工具,在舊一點的系統中,它被用來管理 SysVinit 指令碼,以及
  • chkconfig 工具,為系統服務升級和查詢執行級別資訊
  • shutdown 你一定使用過幾次來重新啟動或關閉一個執行的系統。

下面的表格展示了使用傳統的工具和 systemctl 之間的相似之處:

舊式工具Systemctl 等價命令描述
service name start systemctl start name 啟動 name (這裡 name 是一個服務)
service name stop systemctl stop name 停止 name
service name condrestart systemctl try-restart name 重新啟動 name (如果它已經執行了)
service name restart systemctl restart name 重新啟動 name
service name reload systemctl reload name 過載 name 的設定
service name status systemctl status name 顯示 name 的當前狀態
service - status-all systemctl 顯示當前所有服務的狀態
chkconfig name on systemctl enable name 通過一個特定的單元檔案,讓 name 可以在系統啟動時執行(這個檔案是一個符號連結)。啟用或禁用一個啟動時的進程,實際上是增加或移除一個到 /etc/systemd/system 目錄中的符號連結。
chkconfig name off systemctl disable name 通過一個特定的單元檔案,讓 name 可以在系統啟動時禁止執行(這個檔案是一個符號連結)。
chkconfig -list name systemctl is-enabled name 確定 name (一個特定的服務)當前是否啟用。
chkconfig - list systemctl - type=service 顯示所有的服務及其是否啟用或禁用。
shutdown -h now systemctl poweroff 關機
shutdown -r now systemctl reboot 重新啟動系統

systemd 也引進了單元(unit)(它可能是一個服務,一個掛載點,一個裝置或者一個網路通訊端)和目標(target)(它們定義了 systemd 如何去管理和同時開啟幾個相關的進程,可以認為它們與在基於 SysVinit 的系統中的執行級別等價,儘管事實上它們並不等價)的概念。

 

總結歸納

其他與進程管理相關,但並不僅限於下面所列的功能的任務有:

1. 在考慮到系統資源的使用上,調整一個進程的執行優先順序:

這是通過 renice 工具來完成的,它可以改變一個或多個正在執行著的進程的排程優先順序。簡單來說,排程優先順序是一個允許核心(當前只支援 >= 2.6 的版本)根據某個給定進程被分配的執行優先順序(即友善度(niceness),從 -20 到 19)來為其分配系統資源的功能。

renice 的基本語法如下:

  1. #renice[-n] priority [-gpu] identifier

在上面的通用命令中,第一個引數是將要使用的優先順序數值,而另一個引數可以是進程 ID(這是預設的設定),行程群組 ID,使用者 ID 或者使用者名稱。一個常規的使用者(即除 root 以外的使用者)只可以更改他或她所擁有的進程的排程優先順序,並且只能增加友善度的層次(這意味著佔用更少的系統資源)。

進程排程優先順序

2. 按照需要殺死一個進程(或終止其正常執行):

更精確地說,殺死一個進程指的是通過 kill 或 pkill 命令給該進程傳送一個信號,讓它優雅地(SIGTERM=15)或立即(SIGKILL=9)結束它的執行。

這兩個工具的不同之處在於前一個被用來終止一個特定的進程或一個行程群組,而後一個則允許你通過進程的名稱和其他屬性,執行相同的動作。

另外, pkill 與 pgrep 相綑綁,pgrep 提供將受符合的進程的 PID 給 pkill 來使用。例如,在執行下面的命令之前:

  1. #pkill-u gacanepa

檢視一眼由 gacanepa 所擁有的 PID 或許會帶來點幫助:

  1. #pgrep-l -u gacanepa

找到使用者擁有的 PID

預設情況下,kill 和 pkiill 都傳送 SIGTERM 信號給進程,如我們上面提到的那樣,這個信號可以被忽略(即該進程可能會終止其自身的執行,也可能不終止),所以當你因一個合理的理由要真正地停止一個執行著的進程,則你將需要在命令列中帶上特定的 SIGKILL 信號:

  1. #kill-9 identifier #殺死一個進程或一個行程群組
  2. #kill-s SIGNAL identifier #同上
  3. #pkill-s SIGNAL identifier #通過名稱或其他屬性來殺死一個進程

 

結論

在這篇文章中,我們解釋了在 RHEL 7 系統中,有關開機啟動過程的基本知識,並分析了一些可用的工具來幫助你通過使用一般的程式和 systemd 特有的命令來管理進程。

請注意,這個列表並不旨在涵蓋有關這個話題的所有花哨的工具,請隨意使用下面的評論欄來新增你自已鍾愛的工具和命令。同時歡迎你的提問和其他的評論。


via: http://www.tecmint.com/rhcsa-exam-boot-process-and-process-management/

作者:Gabriel Cánepa 譯者:FSSlc 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-09/123249.htm


IT145.com E-mail:sddin#qq.com