Linux 系統進程管理與計劃任務詳解
一、程序與進程的基本概念
- 程序:保存在外部存儲介質中的可執行機器代碼和數據的靜態集合。
- 進程:在CPU及內存中處于動態執行狀態的計算機程序。
- 關系:每個程序啟動后,可創建一個或多個進程。
二、進程查看工具
1. ps
(查看靜態進程信息)
-
常用選項:
-a
:顯示當前終端下所有進程(含其他用戶);與-x
結合顯示系統所有進程。-u
:以用戶為主的格式輸出進程信息。-x
:顯示當前用戶所在終端的進程信息。-e
:顯示系統內所有進程。-l
:長格式顯示。-f
:完整格式顯示。
常用aux和elf的組合
-
輸出字段含義:
USER
:啟動進程的用戶賬號。PID
:進程唯一ID號。%CPU
:CPU占用百分比。%MEM
:內存占用百分比。VSZ
:虛擬內存(swap)占用大小。RSS
:物理內存占用大小。TTY
:運行終端(“?”表示未知/無需終端)。STAT
:進程狀態(S休眠、R運行、Z僵死、<高優先級、N低優先級、s父進程、+前臺進程、L鎖內存)。START
:啟動時間。TIME
:占用CPU的時間。COMMAND
:啟動進程的命令名稱。
2. top
(查看動態進程信息)
-
核心指標:
-
load average
:CPU平均負載(1分鐘、5分鐘、15分鐘);若5/15分鐘負載超過CPU個數2倍,系統高負載。 -
task
:- total:系統當前所有進程的總數(包括所有狀態)。
- running:正在占用 CPU 運行的進程數(處于
R
狀態)。 - sleeping:休眠的進程數(等待事件 / 資源,如 I/O 完成,處于
S
或D
狀態)。 - stopped:被暫停的進程(如通過
ctrl+z
掛起,處于T
狀態)。 - zombie:僵死進程(進程已終止,但父進程未回收其資源,需手動清理)。
-
%cpu
:- us(user):用戶空間進程占用 CPU 的比例(如應用程序)。若長期過高,可能是用戶程序消耗資源過多。
- sy(system):內核空間進程占用 CPU 的比例(如系統調用、進程調度)。若過高,可能是內核頻繁處理任務(如大量 I/O 調度)。
- ni(nice):調整過優先級的用戶進程(通過
nice
命令設置)占用 CPU 的比例。 - id(idle):CPU 空閑的比例。若長期過低(如 < 10%),說明 CPU 負載高。
- wa(iowait):CPU 等待 I/O 操作(如磁盤讀寫、網絡傳輸)的時間比例。若長期 > 20%,可能是 I/O 瓶頸(如磁盤慢、網絡擁堵)。
- hi(hardware irq):硬件中斷(如鍵盤、磁盤控制器)占用 CPU 的比例。
- si(software irq):軟件中斷(如系統定時器)占用 CPU 的比例。
- st(steal):被虛擬化環境中其他虛擬機占用的 CPU 比例(僅在虛擬機中有效)。
-
mem
:- total:物理內存總容量(單位通常為 KB)。
- used:已被進程實際使用的內存(不包括緩沖 / 緩存)。
- free:完全空閑的內存(未被任何進程或緩沖 / 緩存使用)。
- buff/cache:
buff
:用于緩沖寫入的數據(即將寫入磁盤的臨時數據,避免頻繁磁盤 I/O)。cache
:用于緩存讀取的數據(從磁盤讀取過的數據,下次可直接從內存讀取,加速訪問)。- 這部分內存可被系統自動釋放給需要的進程,因此實際 “可用內存”≈ free + buff/cache。
-
swap
:- total:交換空間(虛擬內存)總容量(通常為磁盤上的 swap 分區 / 文件)。
- used:已使用的交換空間(當物理內存不足時,系統會將部分不常用內存數據寫入 swap)。
- free:空閑的交換空間。
- avail Mem:估算的 “可用物理內存”(包括 free 內存 + 可釋放的 buff/cache,供新進程使用的內存量)。
-
-
進程信息字段:
列名 含義說明 PID
進程唯一 ID(系統中唯一,可用于 kill
等命令操作進程)。USER
進程所屬用戶(進程的創建者或運行用戶)。 PR
進程優先級(數值越小,優先級越高): - 0~39 之間(內核動態調整); - 實時優先級(-1~-20,比普通進程高)。 NI
進程的 nice
值(用戶可調整的優先級偏移量): - 范圍 -20~19(默認 0); - 數值越小,優先級越高(PR = NI + 20
,便于顯示)。VIRT
進程占用的虛擬內存總量(包括物理內存、swap、未使用的分配內存等,單位 KB)。 RES
進程實際使用的物理內存(不包括 swap,單位 KB, RES = 實際占用的物理內存
)。SHR
進程與其他進程共享的內存量(單位 KB,包括共享庫、共享數據等)。 S
進程狀態(單字母標識): - R
:運行中(正在使用 CPU 或等待調度); -S
:休眠(等待事件,可被喚醒); -D
:不可中斷休眠(如等待磁盤 I/O,不能被信號終止); -T
:停止(被ctrl+z
或kill -19
暫停); -Z
:僵死(進程已終止,資源未回收)。%CPU
進程自上次刷新以來占用 CPU 的百分比(單個核心為 100%,多核心總和可超過 100%)。 %MEM
進程使用的物理內存占系統總內存的百分比。 TIME+
進程自啟動以來累計占用的 CPU 時間(精確到 0.01 秒)。 COMMAND
啟動進程的命令(按 c
可顯示完整命令路徑)。
3. 其他進程查看命令
pgrep -l 進程名
:查看某進程的進程號和名稱(如pgrep -l systemd
)。pstree
:查看進程樹形結構:-p
:同時列出PID;-u
:列出用戶名;-a
:列出完整命令。
三、進程控制
1. 手動啟動進程
- 前臺啟動:默認方式(命令直接執行)。
- 后臺啟動:命令后加
&
(如route &
,進程放入后臺執行)。
2. 進程掛起與恢復
- 掛起當前進程:前臺執行的命令按
ctrl+z
,調入后臺并停止執行。 - 查看后臺進程:
jobs -l
。 - 恢復運行:
bg
:后臺暫停的任務恢復后臺執行。fg
:后臺任務恢復到前臺執行。
3. 終止進程
kill 進程號
:終止指定進程;-9
選項強制終止(如kill -9 1234
)。killall 進程名
:終止多個同名進程;-9
強制(如killall -9 httpd
)。pkill
:按進程名、用戶、終端等終止(-U
指定用戶,-t
指定終端)。
四、計劃任務
用于在指定時間/日期執行預設任務(如備份、數據采集)。
1. at
(一次性任務)
- 設置:
at 時間 日期
(如at 23:30 2020-11-23
),輸入命令后按ctrl+d
結束。 - 示例:
at 23:30 2020-11-23
→at> ls / > /tmp/a
→ctrl+d
。 - 管理:
atq
:查詢at任務。at -c 任務號
:查看任務詳情。atrm 任務號
:刪除任務。
2. crontab
(周期性任務)
- 配置文件:
- 系統任務:
/etc/crontab
。 - 用戶任務:
/var/spool/cron/
(按用戶名存儲)。
- 系統任務:
- 時間格式:分 時 日 月 周(空格分隔)。
- 常用選項:
-e
:編輯計劃任務。-u 用戶名
:指定用戶(如crontab -u natasha -e
)。-l
:查詢任務列表。-r
:刪除任務列表。
- 示例:
- 為用戶natasha配置每天14:23執行
/bin/echo "RHCSA"
,僅允許natasha和root創建任務:useradd natasha crontab -u natasha -e 輸入:23 14 * * * /bin/echo "RHCSA" vim /etc/cron.allow 創建白名單只允許natasha和root創建任務 寫入:root、natasha systemctl restart crond && systemctl enable crond
- 每月1~5號14:00-17:00,每10分鐘執行
/bin/echo "I Love Galaxy"
:crontab -e # 輸入:*/10 14-17 1-5 * * /bin/echo "I Love Galaxy" systemctl restart crond && systemctl enable crond
- 周一至周五8:00-21:00,每2分鐘將當前時間附加到
/home/galaxy/my_first_cron_job.txt
:crontab -e # 輸入:*/2 8-21 * * 1-5 date >> /home/galaxy/my_first_cron_job.txt
- 為用戶natasha配置每天14:23執行