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: 1003

3 個獨立的 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 B

2. 擁有獨立的資源

每個 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

🎓 延伸思考

  1. 為什麼需要 Process?

    • 隔離:一個程式崩潰不影響其他程式
    • 並行:多個 Process 可以同時執行
    • 安全:Process 之間記憶體隔離
  2. Process 的成本?

    • 創建 Process 需要時間
    • 每個 Process 消耗記憶體
    • Process 間通訊(IPC)較複雜
  3. Process vs Thread?

    • 👉 下一篇詳細說明

上一篇: 目錄 下一篇: 01-2. Process 的組成(Code, Data, Stack, Heap)


最後更新:2025-01-04

0%