您的位置:首页 > 其它

进程管理API之task_tgid_nr_ns

2017-12-06 14:24 585 查看
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号是局部的.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: