目錄
01-1. Process 是什麼
⏱️ 閱讀時間: 8 分鐘 🎯 難度: ⭐ (超級簡單)
🤔 一句話解釋
Process(行程/進程)是作業系統中正在執行的程式實例,擁有自己的記憶體空間和系統資源。
🏢 用公司來比喻
程式(Program)= 公司章程
# program.py(公司章程)
def work():
print("處理任務...")
def sleep():
print("休息中...")這只是一份文件,放在硬碟裡:
- ❌ 不會自己執行
- ❌ 不佔用記憶體
- ❌ 沒有員工在工作
Process(行程)= 正在營運的公司
# 啟動程式 → 創建 Process
python program.py &
# [1] 12345 ← Process ID (PID)當你執行程式時:
- ✅ 作業系統分配記憶體
- ✅ 載入程式碼
- ✅ 開始執行指令
- ✅ 獲得 Process ID (PID)
💻 Process 的本質
靜態 vs 動態
程式(Program)
├─ 放在硬碟
├─ 靜態的程式碼
└─ 不消耗資源
Process(行程)
├─ 載入到記憶體
├─ 正在執行
├─ 消耗 CPU、記憶體
└─ 有獨立的 PID一個程式可以有多個 Process
# 啟動同一個程式 3 次
python server.py & # PID: 1001
python server.py & # PID: 1002
python server.py & # PID: 1003
# 3 個獨立的 Process!比喻:
- 程式 = 麥當勞的經營手冊
- Process = 3 間正在營運的麥當勞分店
🔍 實際案例
案例 1:查看系統中的 Process
# Linux / macOS
ps aux
# 輸出:
USER PID CPU MEM COMMAND
john 1234 2.5 1.2 python server.py
john 1235 0.1 0.8 /bin/bash
john 1236 5.3 2.1 chrome每一行 = 一個 Process
案例 2:Python 創建 Process
import os
import time
print(f"當前 Process ID: {os.getpid()}")
print(f"父 Process ID: {os.getppid()}")
time.sleep(10) # Process 持續執行 10 秒執行結果:
當前 Process ID: 12345
父 Process ID: 12344案例 3:一個程式,多個 Process
# server.py
from multiprocessing import Process
import os
def worker(name):
print(f"Worker {name}, PID: {os.getpid()}")
if __name__ == '__main__':
# 創建 3 個 Process
p1 = Process(target=worker, args=('A',))
p2 = Process(target=worker, args=('B',))
p3 = Process(target=worker, args=('C',))
p1.start()
p2.start()
p3.start()輸出:
Worker A, PID: 1001
Worker B, PID: 1002
Worker C, PID: 10033 個獨立的 Process,各自有自己的 PID!
📊 Process 的關鍵特性
1. 獨立的記憶體空間
# process_a.py
x = 100
print(f"Process A: x = {x}")
# process_b.py
x = 200
print(f"Process B: x = {x}")Process A 和 Process B 的 x 是完全獨立的!
Process A 改變 x 不會影響 Process B2. 擁有獨立的資源
每個 Process 擁有:
- 💾 記憶體空間
- 📁 檔案描述符(File Descriptors)
- 🔒 鎖(Locks)
- 🌐 網路連接
3. 作業系統管理
作業系統 (OS)
├─ 創建 Process
├─ 分配資源(記憶體、CPU 時間)
├─ 調度 Process(決定哪個 Process 執行)
└─ 終止 Process🎯 核心概念總結
Process 的定義
| 特性 | 說明 |
|---|---|
| 是什麼 | 正在執行的程式實例 |
| 記憶體 | 獨立的記憶體空間 |
| 識別 | 有唯一的 Process ID (PID) |
| 資源 | 擁有自己的系統資源 |
| 生命週期 | 創建 → 執行 → 終止 |
Program vs Process
| 特性 | Program(程式) | Process(行程) |
|---|---|---|
| 本質 | 靜態的程式碼 | 動態執行的實例 |
| 位置 | 硬碟 | 記憶體 |
| 數量 | 1 個檔案 | 可以有多個 Process |
| 資源消耗 | 不消耗 | 消耗 CPU、記憶體 |
| 比喻 | 食譜 | 正在烹飪的廚師 |
🔄 Process 的角色
使用者啟動程式
↓
作業系統創建 Process
↓
分配 PID 和資源
↓
載入程式碼到記憶體
↓
開始執行指令
↓
Process 運行中...
↓
執行完畢
↓
作業系統回收資源
↓
Process 終止💡 實用範例
查看當前 Python Process 資訊
import os
import psutil # pip install psutil
# 當前 Process 資訊
current_process = psutil.Process(os.getpid())
print(f"PID: {current_process.pid}")
print(f"名稱: {current_process.name()}")
print(f"狀態: {current_process.status()}")
print(f"記憶體使用: {current_process.memory_info().rss / 1024 / 1024:.2f} MB")
print(f"CPU 使用率: {current_process.cpu_percent(interval=1)}%")
print(f"執行緒數量: {current_process.num_threads()}")輸出範例:
PID: 12345
名稱: python
狀態: running
記憶體使用: 45.23 MB
CPU 使用率: 2.5%
執行緒數量: 1✅ 重點回顧
一句話總結:
Process 是作業系統中正在執行的程式,擁有獨立的記憶體空間和 PID,由作業系統管理其生命週期。
關鍵理解:
- ✅ Program ≠ Process(程式 ≠ 行程)
- ✅ 一個程式可以創建多個 Process
- ✅ 每個 Process 有獨立的記憶體空間
- ✅ Process 有唯一的 PID
- ✅ 作業系統負責管理 Process
🎓 延伸思考
為什麼需要 Process?
- 隔離:一個程式崩潰不影響其他程式
- 並行:多個 Process 可以同時執行
- 安全:Process 之間記憶體隔離
Process 的成本?
- 創建 Process 需要時間
- 每個 Process 消耗記憶體
- Process 間通訊(IPC)較複雜
Process vs Thread?
- 👉 下一篇詳細說明
上一篇: 目錄 下一篇: 01-2. Process 的組成(Code, Data, Stack, Heap)
最後更新:2025-01-04