C 我无法理解PID的内核内部表示

C 我无法理解PID的内核内部表示,c,linux,kernel,C,Linux,Kernel,Linux内核使用struct pid来表示内核空间中的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]; }; 我真的不明白为什么成员任务可以表示“任务列表”。因为任务结构是任务的核心内部表示,一个任务只使用一个任务结构。为什么多个任务可以共享一个“结构pi

Linux内核使用struct pid来表示内核空间中的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];
};

我真的不明白为什么成员任务可以表示“任务列表”。因为任务结构是任务的核心内部表示,一个任务只使用一个任务结构。为什么多个任务可以共享一个“结构pid”?

,因为多个任务可以是同一进程的一部分。例如,考虑使用一个1-T-1线程库(如NPTL)的多线程进程。它有一个进程ID,是一个进程,但由内核调度的多个实体组成。

Yup。虽然它可能只有一个“PID”,但如果您使用
-L
选项(我认为在Linux上这是正确的选项),您仍然可以在
ps
中看到多个“轻量级进程ID”。@JohnZwinck您可以将它们称为“TID”或“任务ID”。