进程管理API之task_tgid_nr_ns

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号是局部的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值