1. 程式 vs 行程
| 維度 | 程式 | 行程 |
| 本質 | 靜態檔案(磁碟上可執行檔) | 動態執行實體(記憶體中) |
| 生命週期 | 永久存在 | 有限,建立→執行→終止 |
| 資源 | 無 | 擁有獨立虛擬記憶體、檔案描述符、CPU 時間片 |
| 對應關係 | 一個程式可對應多個行程 | 一個行程對應一個程式 |
2. Linux 行程操作
建立流程
- 複製父行程環境
- 核心建立
task_struct
- 插入行程鏈表
- 分配資源(記憶體、檔案描述符)
- 複製父行程記憶體映射(Copy-on-Write)
- 管理檔案描述符表
- 通知父行程(SIGCHLD)
終止五種方式
return 自 main
exit()(刷新 I/O 緩衝)
_exit()(直接系統呼叫)
abort()(產生核心傾印)
- 信號終止(
SIGKILL, SIGTERM 等)
終止時核心回收所有資源。
行程間通訊 (IPC)
- 管道: 半雙工,父子/親緣行程,類似檔案讀寫
- 共享記憶體: 多行程映射同一物理頁,最快,需自行同步
- 訊息佇列: 核心維護鏈表,異步,附帶型別標識
行程同步
3. 行程 vs 執行緒
| 特性 | 行程 | 執行緒 |
| 資源擁有 | 獨立虛擬空間、檔案表 | 共享行程資源(記憶體、檔案、信號處理) |
| 排程單位 | 是 | 是(輕量級行程) |
| 切換開銷 | 大(切換頁表、快取) | 小(共用頁表) |
| 通訊 | 需 IPC | 直接讀寫全域變數 |
| 控制結構 | PCB | TCB(較精簡) |
總結:執行緒 ⊂ 行程 ⊂ 程式。多執行緒適合高共享資料場景;多行程適合隔離、安全需求高場景。