我试图更好地理解内核如何实现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的任务列表?我错过了什么?
由于
答案 0 :(得分:0)
结构pid
是进程标识符的内核概念。
它可以识别流程,线程,会话或流程组。这就是为什么有一个任务列表。
在内核代码中解释说它是:
之间的妥协pid_t
,但不保证该流程已识别
是你想要的那个,因为pids以循环方式重复使用