進程基礎概念
- PID:進程 ID,唯一標識。
- PPID:父進程 ID。所有進程祖先為
init (PID 1,systemd 系統為 systemd)。
- fork() + exec():創建子進程標準流程。
fork 複製父進程地址空間 (COW);exec 替換為新程序映像。
- 僵屍進程:子進程退出,父進程未
wait 回收,殘留任務結構體佔用 PID。長期運行程序必須處理 SIGCHLD。
前後台作業控制
| 操作 | 命令/快捷鍵 | 說明 |
| 後台運行 | cmd & | Shell 返回提示符,進程在後台執行 |
| 暫停前台進程 | Ctrl+Z | 發送 SIGTSTP,進程停止 (T 狀態) |
| 查看作業 | jobs -l | 顯示作業號、PID、狀態 (+ 當前, - 次當前) |
| 調至前台 | fg %n | n 為作業號,省略則操作 + 標記作業 |
| 後台繼續運行 | bg %n | 發送 SIGCONT,使停止作業在後台運行 |
| 脫離終端運行 | nohup cmd & | 忽略 SIGHUP,關閉終端進程不終止 |
| 終止作業 | kill %n | 發送信號 (默認 SIGTERM),kill -9 %n 強殺 |
進程狀態碼 (ps/top STAT 欄)
R Running/Runnable 運行/就緒
S Sleeping 可中斷睡眠 (等待事件)
D Disk Sleep 不可中斷睡眠 (通常為 I/O)
T Stopped 作業控制停止 / 被跟蹤
Z Zombie 僵屍
< High Priority 高優先級 (nice < 0)
N Low Priority 低優先級 (nice > 0)
L Locked Pages 鎖定內存頁
s Session Leader 會話首進程
l Multi-threaded 多線程
+ Foreground Group 前台進程組
核心監控命令
ps - 靜態快照
# 所有進程完整信息 (BSD 風格)
ps aux
# 所有進程完整信息 (POSIX 風格)
ps -ef
# 只看當前 Shell 及子進程
ps -l
# 自定義格式
ps -eo pid,ppid,user,pri,ni,%cpu,%mem,vsz,rss,stat,start,time,cmd --sort=-%cpu
top - 動態交互
top -d 2 -p 1234,5678 # 每 2 秒刷新,監控指定 PID
# 交互鍵:
# P: CPU 排序 | M: 內存排序 | T: TIME+ 排序 | N: PID 排序
# k: 發送信號 | r: 修改 nice | q: 退出 | 1: 切換 CPU 核心顯示
pstree - 進程樹
pstree -p -u -A # 顯示 PID、用戶、ASCII 連接線
kill / killall - 信號發送
kill -l # 列出所有信號
kill -15 PID # SIGTERM 優雅終止
kill -9 PID # SIGKILL 強制殺死 (不可捕獲)
kill -1 PID # SIGHUP 重讀配置 (守護進程常用)
killall -i -9 nginx # 按名稱殺死,-i 交互確認
常用信號表
| 信號 | 值 | 動作 | 典型用途 |
| SIGHUP | 1 | 終止 | 終端掛起 / 守護進程重讀配置 |
| SIGINT | 2 | 終止 | Ctrl+C 中斷前台進程 |
| SIGQUIT | 3 | 棄核終止 | Ctrl+\ 產生 core dump |
| SIGKILL | 9 | 終止 | 強制殺死,不可捕獲/忽略 |
| SIGTERM | 15 | 終止 | 標準優雅關閉信號 |
| SIGCHLD | 17 | 忽略 | 子進程狀態變化,父進程捕獲回收僵屍 |
| SIGSTOP | 19 | 停止 | 不可捕獲,暫停進程 |
| SIGCONT | 18 | 繼續 | 恢復 SIGSTOP/SIGTSTP 暫停的進程 |
| SIGTSTP | 20 | 停止 | Ctrl+Z 終端暫停 |
優先級與 Nice 值
- PR (Priority):內核調度優先級,數值越小優先級越高。
- NI (Nice):用戶空間可調整範圍
-20 ~ +19,默認 0。nice -n -5 cmd (高優先級需 root),renice -5 -p PID 調整運行中進程。
/proc 文件系統進程接口
/proc/PID/
├── cmdline # 啟動命令行 (以 \0 分隔)
├── environ # 環境變量
├── fd/ # 文件描述符符號鏈接
├── maps # 內存映射區域
├── status # 狀態信息 (Name, State, Pid, PPid, Uid, Gid, VmSize, VmRSS...)
├── stat # 精簡狀態 (供 ps/top 解析)
├── exe # 可執行文件符號鏈接
├── cwd # 當前工作目錄符號鏈接
└── root # 根目錄符號鏈接 (chroot 影響)