Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux 進程關係深度解析:進程組、會話與工作控制

編輯:關於 Linux

身為 Linux 系統管理員,理解進程間的層級關係——父子進程、進程組、會話、前後台工作——是訊號處理、作業控制與服務管理的基石。本文以 ps 實戰輸出為例,圖文並茂拆解核心概念。

進程樹與基本識別碼

  • PID (Process ID): 進程唯一識別碼。
  • PPID (Parent PID): 父進程 ID,所有進程最終追溯至 init (PID 1) 或 systemd。
  • 樹狀結構: 透過 fork() + exec() 建立父子關係,形成進程樹。

進程組

定義

  • 一組相關進程的集合,共享同一 PGID (Process Group ID)。
  • PGID = 組長進程的 PID。
  • 組長可先結束,進程組仍存在,直到最後一個進程結束。

實戰觀察

$ ps -o pid,pgid,ppid,comm
  PID  PGID  PPID COMMAND
17763 17763 17751 bash
18534 18534 17763 ps
18535 18534 17763 cat

bash 為組長,ps 與 cat 同屬 PGID 17763。此時對 PGID 發送訊號(如 kill -TERM -17763)將影響組內所有進程。

會話與工作控制

核心概念

  • Session (會話): 多個進程組的集合,由會話領導進程建立,SID = 領導進程 PID。
  • 控制終端: 每個會話最多連接一個控制終端(/dev/ttyX 或 pts/N)。
  • 前台工作: 唯一直接接收終端輸入/輸出與終端產生訊號的進程組。
  • 後台工作: 不接收終端輸入,若嘗試讀取終端將收到 SIGTTIN 暫停。

Shell 操作實例

# 後台執行
$ ping localhost > log &
[1] 10141        # [1] = 工作號, 10141 = PGID

# 查看詳細資訊
$ ps -o pid,pgid,ppid,sid,tty,comm

# 發送訊號給工作
$ kill -TERM %1      # 以工作號
$ kill -TERM -10141  # 以 PGID (前加負號)

# 切換前後台
$ fg %1              # 後台 → 前台
$ bg %1              # 暫停 → 後台繼續
$ Ctrl+Z             # 前台 → 暫停

訊號傳遞機制

  • 終端產生的訊號(Ctrl+C → SIGINT、Ctrl+\ → SIGQUIT、Ctrl+Z → SIGTSTP)僅傳遞給前台進程組。
  • 這就是為何後台工作不會被 Ctrl+C 中斷的原因。

多終端與多會話

每開啟一個終端視窗/SSH 連線,即建立一個獨立會話,擁有各自的前台/後台工作。圖形介面雖已取代文字模式多工,但會話機制仍廣泛應用於 systemd、tmux、screen、容器運行時等底層架構。

總結速查表

概念關鍵 ID常用指令/符號
進程組PGIDkill -PGID, setpgid()
會話SIDsetsid(), getsid()
工作Job Number [%n]jobs, fg %n, bg %n, kill %n
前台/後台—&, Ctrl+Z, stty tostop

進程組與會話關係圖

Copyright © Windows教程網 All Rights Reserved