copy_process的第二部工作是取得PID
该函数的进一步定义如下:
- static inline pid_t task_pid_vnr(struct task_struct *tsk)
-
{
-
return __task_pid_nr_ns(tsk, PIDTYPE_PID, NULL);
-
}
继续。。
- pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type,
-
struct pid_namespace *ns)
-
{
-
pid_t nr = 0;
-
-
rcu_read_lock();
-
if (!ns)
-
ns = current->nsproxy->pid_ns;
-
if (likely(pid_alive(task))) {
-
if (type != PIDTYPE_PID)
-
task = task->group_leader;
-
nr = pid_nr_ns(task->pids[type].pid, ns);
-
}
-
rcu_read_unlock();
-
-
return nr;
-
}
继续
- pid_t pid_nr_ns(struct pid *pid, struct pid_namespace *ns)
-
{
-
struct upid *upid;
-
pid_t nr = 0;
-
-
if (pid && ns->level <= pid->level) {
-
upid = &pid->numbers[ns->level];
-
if (upid->ns == ns)
-
nr = upid->nr;
-
}
-
return nr;
-
}
这个代码的作用是取得pid在指定命名空间ns下的pid
这整段代码的作用就是取得task在当前命名空间下的局部pid。
阅读(2041) | 评论(0) | 转发(1) |