pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
用于获得task在ns下的局部pid号
其使用的例程如下:
static u32 perf_event_pid(struct perf_event *event, struct task_struct *p)
{
/*
* only top level events have the pid namespace they were created in
*/
if (event->parent)
event = event->parent;
return task_tgid_nr_ns(p, event->ns);
}
其源码分析如下:
pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)
{
return pid_nr_ns(task_tgid(tsk), ns);
}
可以看到task_tgid_nr_ns 其实分为两部分,第一部分首先通过task_tgid拿到线程组leader的pid
其源码如下:
static inline struct pid *task_tgid(struct task_struct *task)
{
return task->group_leader->pids[PIDTYPE_PID].pid;
}
然后再通过pid_nr_ns,得到其在namespace下的pid号
这里很明显看到通过task_tgid得到的pid号是全局的,而pid_nr_ns得到的pid号是局部的.
进程管理API之task_tgid_nr_ns
最新推荐文章于 2022-09-27 20:23:01 发布