Linux系統管理之程式管理

九派Linux發表於2020-08-31

在正式的工作環境中,作為Linux系統管理員,監視系統程式的執行情況應該是日常的工作之一。那麼,到底什麼是程式呢?

什麼是程式

程式是正在執行的一個程式或命令,每個程式都是一個執行的實體,都有自己的地址空間,並佔用一定的系統資源,它由程式指令,和從檔案、其它程式中讀取的資料或系統使用者的輸入組成。作業系統會給程式分配一個 ID,稱為 PID(程式 ID)。

程式的型別

  • 前臺程式: 這些程式由終端會話初始化和控制。換句話說,需要有一個連線到系統中的使用者來啟動這樣的程式;它們不是作為系統功能/服務的一部分自動啟動
  • 後臺程式: 這些程式沒有連線到終端;它們不需要任何使用者輸入
  • 守護程式:這是後臺程式的特殊型別,它們在系統啟動時啟動,並作為服務一直執行

在作業系統中,所有可以執行的程式與命令都會產生程式。只是有些程式和命令非常簡單,如 ls 命令等,它們在執行完後就會結束,相應的程式也就會終結,所以我們很難捕捉到這些程式。但是還有一些程和命令,比如 httpd 程式,啟動之後就會一直駐留在系統當中,我們把這樣的程式稱作常駐記憶體程式

某些程式會產生一些新的程式,我們把這些程式稱作子程式,而把這個程式本身稱作父程式。比如,我們必須正常登入到 Shell 環境中才能執行系統命令,而 Linux 的標準 Shell 是 bash。我們在 bash 當中執行了 ls 命令,那麼 bash 就是父程式,而 ls 命令是在 bash 程式中產生的程式,所以 ls 程式是 bash 程式的子程式。也就是說,子程式是依賴父程式而產生的,如果父程式不存在,那麼子程式也不存在了。

檢視系統中所有的程式: ps aux

ps命令用於檢視系統中的程式狀態,格式為“ps [引數]”。

  • 檢視系統中所有的程式

    $ ps aux

引數 作用
-a 顯示所有程式(包括其他使用者的程式)
-u 使用者以及其他詳細資訊
-x 顯示沒有控制終端的程式

image

如上圖,我們來看看以上輸出資訊中各列的具體含義:

列名 含義
USER 該程式是由哪個使用者產生的
PID 程式的 ID
%CPU 該程式佔用 CPU 資源的百分比,佔用的百分比越高,程式越耗費資源
%MEM 該程式佔用實體記憶體的百分比,佔用的百分比越高,程式越耗費資源
VSZ 該程式佔用虛擬記憶體的大小,單位為 KB
RSS 該程式佔用實際實體記憶體的大小,單位為 KB
TTY 該程式是在哪個終端執行的。
STAT 程式狀態。
START 該程式的啟動時間。
TIME 該程式佔用 CPU 的運算時間,注意不是系統時間。
COMMAND 產生此程式的命令名。

常見的STAT程式狀態有以下幾種:

  • D:不可被喚醒的睡眠狀態,通常用於 I/O 情況
  • R:該程式正在執行
  • S:該程式處於睡眠狀態,可被喚醒
  • T:停止狀態,可能是在後臺暫停或程式處於除錯狀態
  • W:記憶體互動狀態(從 2.6 核心開始無效)
  • X:死掉的程式(應該不會出現)
  • Z:殭屍程式。程式已經中止,但是部分程式還在記憶體當中
  • <:高優先順序(以下狀態在 BSD 格式中出現)
  • N:低優先順序
  • L:被鎖入記憶體
  • s:包含子程式
  • l:多執行緒(小寫 L)
  • +:位於後臺

檢視系統中所有的程式 ps -le

ps -le 可以檢視系統中所有的程式,而且還能看到程式的父程式的 PID 和程式優先順序。

引數 作用
-l 長格式顯示更加詳細的資訊;
-e 顯示所有程式;

image

如上圖,我們來看看以上輸出資訊中各列的具體含義:

列名 含義
F 程式標誌,說明程式的許可權,常見的標誌有兩個:1 程式可以被複制,但是不能被執行;4:程式使用超級使用者許可權;
S 程式狀態。具體的狀態和ps aux命令中的 STAT 狀態一致;
UID 執行此程式的使用者的 ID;
PID 程式的 ID;
PPID 父程式的 ID;
C 該程式的 CPU 使用率,單位是百分比;
PRI 程式的優先順序,數值越小,該程式的優先順序越高,越早被 CPU 執行;
NI 程式的優先順序,數值越小,該程式越早被執行;
ADDR 該程式在記憶體的哪個位置;
SZ 該程式佔用多大記憶體;
WCHAN 該程式是否執行。”-“代表正在執行;
TTY 該程式由哪個終端產生;
TIME 該程式佔用 CPU 的運算時間,注意不是系統時間;
CMD 產生此程式的命令名;

刪除程式 kill

kill可將指定的資訊送至程式,預設的資訊為SIGTERM(15),可將指定程式終止。若仍無法終止該程式,可使用SIGKILL(9)資訊嘗試強制刪除程式。kill命令格式如下:

$ kill [訊號] PID

訊號編號 訊號名 含義
0 EXIT 程式退出時收到該資訊。
1 HUP 掛掉電話線或終端連線的掛起訊號,這個訊號也會造成某些程式在沒有終止的情況下重新初始化。
2 INT 表示結束程式,但並不是強制性的,相當於用鍵盤輸入 [ctrl]-c 來中斷一個程式的進行
3 QUIT 退出
9 KILL 殺死程式,即強制結束程式
15 TERM 正常結束程式,命令的預設訊號
19 SIGSTOP 相當於用鍵盤輸入 [ctrl]-z 來暫停一個程式的進行

我們用的最多的訊號編號是1,9,15。

最後我們來看看所謂的“殭屍程式”,殭屍程式是當子程式比父程式先結束,而父程式又沒有回收子程式,釋放子程式佔用的資源,此時子程式將成為一個殭屍程式。殭屍程式會對主機的穩定性產生影響,所以,在產生殭屍程式後,一定要對產生殭屍程式的軟體進行優化,避免一直產生殭屍程式;對於已經產生的殭屍程式,可以在查詢出來之後強制中止。

image

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章