Linux 進程管理與計劃任務設置
一、進程管理
進程管理用于監控、控制系統中運行的程序(進程),包括查看進程狀態、調整優先級、終止異常進程等。以下是核心命令及操作說明:
1. 常用進程查看命令
(1)ps:查看進程靜態信息
功能:顯示系統當前進程的快照(靜態信息)。
選項 | 說明 |
-a | 顯示當前終端下的所有進程(包括其他用戶),與 -x 結合顯示系統所有進程 |
-u | 以用戶為中心的格式輸出進程信息 |
-x | 顯示當前用戶所有終端的進程(包括無終端的后臺進程) |
-e | 顯示系統內所有進程 |
-l | 長格式顯示進程信息 |
-f | 完整格式顯示進程信息 |
常用用法:
ps -aux # 顯示所有進程的詳細信息(用戶視角)ps -elf # 顯示所有進程的完整格式(系統視角)
輸出字段說明:
字段 | 含義 |
USER | 啟動進程的用戶賬號 |
PID | 進程唯一 ID(系統中唯一) |
%CPU | 進程占用 CPU 的百分比 |
%MEM | 進程占用內存的百分比 |
VSZ | 占用虛擬內存(swap)的大小(KB) |
RSS | 占用物理內存的大小(KB) |
TTY | 進程運行的終端(? 表示無需終端) |
STAT | 進程狀態(R運行、S休眠、Z僵死、<高優先級、N低優先級等) |
START | 進程啟動時間 |
TIME | 進程占用 CPU 的總時間 |
COMMAND | 啟動進程的命令名稱 |
(2)top:查看進程動態信息
功能:實時動態監控進程狀態(默認每 3 秒刷新一次)。
界面核心指標說明:
- 頂部系統信息:
- load average: 0.1, 0.5, 1.0:CPU 1 分鐘、5 分鐘、15 分鐘內的平均負載(超過 CPU 核心數 2 倍表示高負載)。
- Task(進程統計):
- total:總進程數;running:運行中;sleeping:休眠;stopped:停止;zombie:僵死。
- % CPU(CPU 占用):
- us:用戶進程占用;sy:系統進程占用;ni:調整過優先級的用戶進程;id:空閑 CPU;wa:I/O 等待;hi/si:硬 / 軟中斷;st:虛擬化占用。
- Mem/Swap:物理內存 / 交換空間的使用情況(總容量、已用、空閑)。
- 進程列表字段:
字段 | 含義 |
PID | 進程 ID |
USER | 進程屬主 |
PR | 進程優先級(內核動態調整) |
NI | 進程 nice 值(-20~19,值越小優先級越高) |
VIRT | 進程占用的虛擬內存總量(KB) |
RES | 進程占用的物理內存總量(KB) |
SHR | 與其他進程共享的內存量(KB) |
S | 進程狀態(D不可中斷休眠、R運行、S休眠、T停止、Z僵死) |
%CPU/%MEM | 進程占用 CPU / 內存的百分比 |
TIME+ | 進程啟動后占用的 CPU 總時間 |
COMMAND | 啟動進程的命令 |
(3)pgrep -l <進程名>:按名稱查詢進程
功能:根據進程名查找對應的進程 ID(PID)和名稱。
示例:
pgrep -l systemd # 查找名為sshd的進程,輸出格式:PID 進程名
(4)pstree:查看進程樹形結構
功能:以樹形圖展示進程間的父子關系。
選項 | 說明 |
-p | 同時顯示進程 PID |
-u | 顯示進程所屬用戶 |
-a | 顯示完整的命令行信息 |
示例:
pstree -pu # 顯示進程樹、PID及所屬用戶
2. 進程控制操作
(1)進程啟動方式
- 前臺啟動:命令直接在當前終端運行(默認方式),例如:
ls /home # 前臺執行,執行期間終端被占用
- 后臺啟動:命令后加 &,進程在后臺運行,終端可繼續使用:
route & # 后臺執行route命令
(2)進程掛起與恢復
- 掛起當前進程:前臺進程運行時,按 Ctrl + Z 可將其掛起(轉入后臺并停止執行)。
示例:
top # 前臺運行top,按Ctrl+Z掛起
- 查看后臺進程:
jobs -l # 列出后臺進程(-l顯示PID)
- 恢復后臺進程:
- bg <任務號>:將后臺掛起的進程恢復運行(繼續在后臺):
bg 1 # 恢復任務號為1的后臺進程
- fg <任務號>:將后臺進程調回前臺運行:
fg 1 # 將任務號為1的進程調至前臺
3. 進程終止與優先級調整
(1)kill <進程號>:通過 PID 終止進程
功能:向指定 PID 的進程發送終止信號(默認信號為 15,正常終止)。
- 強制終止(信號 9,無法忽略):
kill -9 1234 # 強制終止PID為1234的進程
(2)pkill <條件>:按條件終止進程
功能:根據進程名、用戶、終端等屬性終止進程。
選項 | 說明 |
-U <用戶名> | 終止指定用戶的進程 |
-t <終端> | 終止指定終端的進程 |
示例:
pkill -U zhangsan # 終止用戶zhangsan的所有進程
pkill -9 sshd # 強制終止所有名為sshd的進程
(3)killall <進程名>:按名稱終止所有同名進程
示例:
killall -9 httpd # 強制終止所有httpd進程
(4)renice:調整進程優先級
功能:修改進程的 nice 值(-20~19,值越小優先級越高)。
示例:
renice -5 1234 # 將PID為1234的進程nice值改為-5(提高優先級)
二、計劃任務設置
計劃任務用于自動執行周期性或一次性任務(如備份、監控等),核心工具為 at(一次性)和 crontab(周期性)。
1. 一次性計劃任務(at)
(1)設置一次性任務
語法:at <時間> [日期],進入編輯界面輸入命令,按 Ctrl + D 保存退出。
示例:
at 23:30 2025-07-31 # 設置2025年7月31日23:30執行任務at> ls / > /tmp/dir_list # 任務內容:將/目錄列表寫入/tmp/dir_listat> <EOT> # 按Ctrl+D結束編輯
(2)管理at任務
- 查看待執行任務:
atq # 列出所有at任務(格式:任務號 執行時間 用戶名)
- 查看任務詳情:
at -c 1 # 查看任務號為1的具體內容
- 刪除任務:
atrm 1 # 刪除任務號為1的at任務
2. 周期性計劃任務(crontab)
(1)基本語法
通過 crontab -e 編輯任務,格式為:
分 時 日 月 周 命令
時間字段 | 取值范圍 | 特殊符號 | 含義 |
分 | 0~59 | , | 枚舉(如10,20表示 10 分和 20 分) |
時 | 0~23 | - | 范圍(如9-17表示 9 點到 17 點) |
日 | 1~31 | */n | 間隔(如*/2表示每 2 天) |
月 | 1~12 | ||
周 | 0~7(0/7 為周日) |
(2)crontab 命令選項
選項 | 說明 |
-e | 編輯當前用戶的計劃任務 |
-u <用戶> | 指定用戶(僅 root 可用),如 crontab -u zhangsan -e |
-l | 列出當前用戶的計劃任務 |
-r | 刪除當前用戶的所有計劃任務 |
(3)配置示例
# 每天凌晨3點執行備份腳本0 3 * * * /root/backup.sh# 每周一、三、五的18:30執行日志清理30 18 * * 1,3,5 /usr/bin/clean_logs.sh# 每月1日和15日的0點,每小時執行一次監控腳本0 */1 1,15 * * /usr/local/monitor.sh
(4)任務文件存放
- 系統級任務:/etc/crontab(需 root 編輯)。
- 用戶級任務:/var/spool/cron/<用戶名>(自動生成,無需手動編輯)。
(5)服務管理
crontab 依賴 crond 服務,需確保其運行:
systemctl restart crond # 重啟服務systemctl enable crond # 設置開機自啟
3. 注意事項
- 關機影響:at 和 crontab 任務均依賴系統運行狀態。若系統在任務預定時間關機,at 任務會失效,crontab 任務會跳過該次執行,后續周期繼續。
- 命令路徑:計劃任務中建議使用命令絕對路徑(如 /usr/bin/ls 而非 ls),避免環境變量問題。
- 日志查看:任務執行日志可通過 /var/log/cron 或 journalctl -u crond 查看。
通過上述工具和操作,可實現對 Linux 進程的全面管理及自動化任務調度,適用于系統監控、定期維護等場景。