一、進程ID號
UNIX進程會分配一個號碼用於在其命名空間中唯一地標識它們。該號碼被稱作進程ID號,簡稱PID。用fork或clone產生的每個進程都由內核自動地分配了一個新的唯一的PID值。
1、進程ID
但每個進程除了PID之外,還有其他的ID。有下列幾種可能的類型。
1)處於某個線程組中的所有進程都有統一的線程組ID。如果進程沒有使用線程,則其PID和TGID相同。
線程組中的主進程被稱作組長。通過clone創建的所有線程的task_struct的group_leader成員,會指向組長的task_struct實例。
2)獨立進程可以合併成進程組(使用setpgrp系統調用)。進程組成員的task_struct的pgrp屬性值都是相同的,即進程組組長的PID。進程組簡化了向組的所有成員發送信號的操作,這對於各種系統程序設計應用是有用的。注意:用管道連接的進程包含在同一個進程組中。
3)幾個進程組可以合併成一個會話。會話中的所有進程都有同樣的會話ID,保存在task_struct的session成員中。SID可以使用setsid系統調用設置。
命名空間增加了PID管理的複雜性。PID命名空間按層次組織。在建立一個新的命名空間時,該命名空間中的所有PID對父命名空間都可見,但子命名空間無法看到父命名空間的PID。但這意味着某些進程具有多個PID,凡可以看到該進程的命名空間,都會爲其分配一個PID。這必須反映在數據結構中。必須區分局部ID和全局ID。