Linux :進程管理,進程控制與計劃任務
一、進程管理
1. 進程與程序
- 程序:靜態的可執行文件(存儲于磁盤)。
- 進程:動態執行的程序實例(占用CPU/內存)。
2. 查看進程
命令 | 作用 | 常用組合 |
---|---|---|
ps | 靜態查看進程 | ps -aux (所有進程) |
top | 動態監控進程(實時刷新) | top -d 5 (5秒刷新) |
pgrep -l 名稱 | 按名稱查進程PID | pgrep -l nginx |
pstree -p | 樹形顯示進程層級(含PID) | `pstree -p |
關鍵字段解析(
top/ps
):
STAT
狀態:R
(運行)、S
(休眠)、Z
(僵尸)、D
(不可中斷)、+
(前臺進程)。NI
值:進程優先級(-20~19,值越小優先級越高)。%CPU/%MEM
:CPU/內存占用率。
3. 控制進程
-
前后臺切換:
command & # 后臺啟動 Ctrl + Z # 掛起到后臺(暫停狀態) jobs -l # 查看后臺任務 fg %1 # 恢復1號任務到前臺 bg %1 # 后臺繼續運行1號任務
-
終止進程:
kill PID # 優雅終止 kill -9 PID # 強制終止 killall 名稱 # 終止同名所有進程 pkill -U 用戶 # 終止某用戶的所有進程
二、計劃任務
1. 一次性任務(at)
at 14:30 2025-4-20 # 設置任務時間
at> echo "new earth kami!" > /tmp/msg
at> Ctrl+D # 保存退出
atq # 查看任務隊列
atrm 任務號 # 刪除任務
2. 周期性任務(cron)
-
配置文件:
- 系統任務:
/etc/crontab
- 用戶任務:
/var/spool/cron/用戶名
- 系統任務:
-
時間格式:
* * * * * <命令> 分 時 日 月 周
到用 - 和用, 每隔用/ 未提及用 * (1到3點,1-3,1點和3點,1,3,每隔兩分鐘*/2 )
-
管理命令:
crontab -e # 編輯當前用戶任務 crontab -l # 查看任務列表 crontab -r # 刪除所有任務
3. 關鍵示例
# 示例1:每天14:23輸出"RHCSA"
23 14 * * * /bin/echo "RHCSA"# 示例2:每月1-5號14:00-17:00,每10分鐘執行
*/10 14-17 1-5 * * /bin/echo "I Love Galaxy"
三、補充重要知識點
1. 僵尸進程處理
- 原因:子進程結束但父進程未回收資源。
- 解決:
- 終止其父進程:
kill -9 父進程PID
- 系統自動回收(若父進程為init)。
- 終止其父進程:
2. 進程優先級調整
-
啟動時指定優先級:
nice -n -20 command # 最高優先級(-20)
-
調整運行中進程:
renice -n 10 -p PID # 將PID進程優先級改為10
3. Cron環境變量問題
- 問題:cron任務可能缺少環境變量(如
PATH
)。 - 解決:
- 在腳本中設置變量(如
export PATH=/usr/bin:/bin
)。 - 使用絕對路徑執行命令。
- 在腳本中設置變量(如
4. Cron權限控制
- 白名單:
/etc/cron.allow
(存在時僅允許列表用戶)。 - 黑名單:
/etc/cron.deny
(拒絕列表用戶)。