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

时间:2015-11-24 16:35:22

标签: linux-kernel kernel pid linux-namespaces

我试图更好地理解内核如何实现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的任务列表?我错过了什么?

由于

1 个答案:

答案 0 :(得分:0)

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

在内核代码中解释说它是:

之间的妥协
  • 仅存储pid_t,但不保证该流程已识别 是你想要的那个,因为pids以循环方式重复使用
  • 存储每个进程线程的指针,这会导致表格太大