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;
}
进程管理API之get_task_pid
最新推荐文章于 2023-05-31 19:43:34 发布