2012-01-16 24 views
2

Linux內核使用struct pid來表示內核空間中的PID。C代碼如下。我無法理解PID的內核內部表示

struct pid 
{ 
atomic_t count; 
/* lists of tasks that use this pid */ 
struct hlist_head tasks[PIDTYPE_MAX]; 
int level; 
struct upid numbers[1]; 
}; 

我實在無法理解爲什麼成員的任務可以表示「任務列表」。既然是task_struct是任務的內核內部表示,和一個任務只使用一個task_struct.Why可以多個任務共享一個「結構PID」?

回答

5

因爲不止一個任務可以是同一過程的一部分。例如,考慮使用NPTL等1對1線程庫的多線程進程。它有一個進程ID,是一個進程,但由內核調度的多個實體組成。

+0

是的。雖然它可能只有一個「PID」,但如果使用'-L'選項(我認爲這是Linux上的正確選項),您仍然可以在'ps'中看到多個「輕量級進程ID」。 – 2012-01-16 01:20:03

+0

@JohnZwinck你可以稱他們爲「TID」或「任務ID」。 – 2012-01-16 01:23:44

+0

Thanks.Great答案。 – 2012-01-16 01:24:45