Linux 進程管理是系統維運、效能分析、故障排除的基石。本文系統整理 ps、pstree、pgrep、pidof、top、kill/killall、nice/renice、前後台作業控制、訊號機制 等核心工具與技巧,附參數速查表與實戰場景,助你精準掌控每一個進程。
-,如 ps -ef-,如 ps aux| 指令 | 用途 | 關鍵欄位 |
|---|---|---|
ps aux | 所有進程完整資訊 (BSD) | USER, PID, %CPU, %MEM, VSZ, RSS, STAT, START, TIME, COMMAND |
ps -ef | 所有進程標準格式 (SysV) | UID, PID, PPID, C, STIME, TTY, TIME, CMD |
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head | CPU 前 10 大進程 | 自訂欄位 + 排序 |
ps -C nginx -o pid,ppid,cmd | 依程式名稱過濾 | 精準定位特定服務 |
ps -L -p PID | 顯示指定 PID 的所有執行緒 (LWP) | 排查多執行緒問題 |
| 碼 | 含義 |
|---|---|
| R | Running/Runnable (執行/就緒) |
| S | Sleeping (可中斷睡眠) |
| D | Uninterruptible Sleep (不可中斷睡眠,通常等 I/O) |
| T | Stopped (工作控制停止/追蹤) |
| Z | Zombie (殭屍,父程序未 wait) |
| < | High Priority (高優先序) |
| N | Low Priority (低優先序) |
| + | Foreground Process Group (前台進程組) |
| l | Multi-threaded (多執行緒) |
| s | Session Leader (會話領頭) |
pstree -p:樹狀顯示父子關係,含 PID,-a 顯示完整命令列。pgrep -u user -f pattern:依使用者/完整命令列模式搜尋 PID。pidof nginx:快速取得守護進程 PID (適用單一主進程服務)。| 鍵 | 功能 |
|---|---|
| M | 依駐留記憶體 (RSS) 排序 |
| P | 依 CPU 使用率排序 (預設) |
| T | 依累積 CPU 時間排序 |
| c | 切換顯示完整命令列 |
| 1 | 切換顯示各 CPU 核心使用率 |
| k | 殺死進程 (輸入 PID + 訊號) |
| r | 重新設定 nice 值 (輸入 PID + nice) |
| d | 改變重繪間隔 (秒) |
| q | 離開 |
啟動參數:top -d 1 -b -n 5 > top.log (每 1 秒批次模式寫入 5 次,適合記錄腳本)。
| 編號 | 名稱 | 用途 | 預設動作 |
|---|---|---|---|
| 1 | SIGHUP | 終端斷開/重讀配置 (nginx -s reload) | 終止 |
| 2 | SIGINT | Ctrl+C 中斷前台程式 | 終止 |
| 9 | SIGKILL | **強制殺死,不可捕捉/忽略/阻塞** | 終止 |
| 15 | SIGTERM | 優雅終止 (預設),程式可釋放資源、存檔 | 終止 |
| 18 | SIGCONT | 繼續已停止進程 | 繼續 |
| 19 | SIGSTOP | 暫停進程 (不可捕捉) | 停止 |
kill -9 1234
kill -SIGKILL 1234
kill -KILL 1234
killall -9 nginx # 殺死所有名為 nginx 的進程
pkill -u www-data -f php # 殺死 www-data 用戶且命令列含 php 的進程
pkill -STOP -f "python.*worker" # 暫停符合模式的進程
nice -n -5 ./compute.sh:啟動時指定 nice -5 (較高優先),**需 root 權限才能負值**。renice -n 10 -p 1234:調整已運行進程 nice 為 10 (降低優先)。renice -n -5 -u www-data:調整該用戶所有進程。| 操作 | 指令/熱鍵 | 說明 |
|---|---|---|
| 前台 → 後台暫停 | Ctrl+Z | 發送 SIGTSTP,進程停止並放入作業表 |
| 後台繼續運行 | bg %1 或 bg | 發送 SIGCONT,%1 為作業號 (jobs 顯示) |
| 後台 → 前台 | fg %1 | 喚回前台繼續互動 |
| 直接後台啟動 | cmd & | 不佔用終端,標準輸出仍導向終端 |
| 查看作業表 | jobs -l | 顯示作業號、PID、狀態、命令 |
| 殺死作業 | kill %1 | % 號不可省略,否則視為 PID |
作業號 vs PID:作業號是 Shell 內部編號 (1,2,3...);PID 是核心全域唯一識別碼。kill 2 殺 PID=2,kill %2 殺作業 2。
vmstat 1 5 # 每 1 秒採樣,共 5 次
關鍵欄位:r (可執行佇列長度)、b (不可中斷睡眠)、si/so (swap in/out)、us/sy/id/wa/st (CPU 細分)。
進程管理工具鏈 ps → pgrep/pidof → top/htop → kill/renice → jobs/bg/fg 形成完整閉環:**觀察 → 定位 → 分析 → 控制 → 驗證**。熟練這套流程,配合 /proc/PID/ 虛擬檔案系統 (fd、maps、stack、environ、limits、cgroup) 深入剖析,即可從容應對生產環境 99% 的進程級故障與效能問題。