深入Linux內核架構-進程管理和調度(三)

一、進程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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章