进程管理API之get_task_pid

struct pid *get_task_pid(struct task_struct *task, enum pid_type type)
用于根据task和pid type找到对应的struct pid,并增加pid的引用计数.
其使用的例程如下:
struct inode *proc_pid_make_inode(struct super_block * sb,
				  struct task_struct *task, umode_t mode)
{
	struct inode * inode;
	struct proc_inode *ei;
	/*
	 * grab the reference to task.
	 */
	ei->pid = get_task_pid(task, PIDTYPE_PID);
	if (!ei->pid)
		goto out_unlock;
}
其源码分析如下:
struct pid *get_task_pid(struct task_struct *task, enum pid_type type)
{
	struct pid *pid;
	rcu_read_lock();
#如果type不是PIDTYPE_PID的话,就将task指向这组task的leader
	if (type != PIDTYPE_PID)
		task = task->group_leader;
#这里其实通过task本身的成员数组就可以直接得到struct pid,get_pid 只是增加struct pid的引用计数
	pid = get_pid(rcu_dereference(task->pids[type].pid));
	rcu_read_unlock();
	return pid;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值