在 Linux/include/linux/pid.h 中定义的'struct pid'成员的任务的目的是什么?



我试图更好地理解内核如何实现pid命名空间。正在使用的基本结构之一是struct pid

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

现在据我所知,数字数组跟踪不同 pid 命名空间中不同 pid 的过程。

我不明白的是tasks成员的目的。它在这里说: (LWN( :

.." 此结构包含 ID 值,即具有此 ID 的任务列表。">

所以我从中了解到,在几个进程/任务之间共享相同的 pid.现在,不同的进程/线程可以共享相同的 tpid/gpid,但不能共享相同的 pid!那么为什么会有具有相同PID的任务列表呢?我错过了什么?

谢谢

结构

pid内核对进程标识符的内部概念。它可以识别进程、线程以及会话进程组。这就是为什么有一个任务列表。

内核代码中解释说,这是以下两者之间的折衷:

  • 仅存储不能保证过程标识的pid_t是您想要的,因为 PID 以循环方式重复使用
  • 为每个进程线程存储指针,这会导致表太大

相关内容

  • 没有找到相关文章

最新更新