内核函数 获取进程描述符 struct pid
2.6.32
(1)struct pid *find_pid_ns(int nr, struct pid_namespace *ns)
功能:根据命名空间和进程号nr获得进程描述符 pid结构体
nr:进程号
ns:命名空间
返回值: 进程描述符指针
头文件:#incldue <linux/pid.h>
(2)static inline struct pid *get_pid(struct pid *pid)
功能:将进程描述符pid的引用计数加1
pid:进程描述符指针
返回值:返回进程描述符指针
头文件:#include <linux/pid.h>
内核实现:(2.6.32)
static inline struct pid *get_pid(struct pid *pid)
{
if (pid)
atomic_inc(&pid->count);//增加引用计数
return pid;
}
(3) struct pid *find_get_pid(pid_t nr)
功能:根据进程号获得进程描述符pid并将进程描述符引用计数加1
参数:进程号
返回值:进程描述符
头文件:#include <linux/pid.h>
内核实现:(2.6.32)
struct pid *find_get_pid(pid_t nr)
{
struct pid *pid;
rcu_read_lock();//RCU读锁加锁
pid = get_pid(find_vpid(nr));//调用get_pid增加引用计数
rcu_read_unlock();//RCU读解锁
return pid;
}
(4) struct pid *find_vpid(int nr)
功能:根据进程号获得进程描述符
nr:进程号
返回值:进程描述符
头文件:#include <linux/pid.h>
内核实现:(2.6.32)
struct pid *find_vpid(int nr)
{
//直接调用find_pid_ns来获得进程描述符
return find_pid_ns(nr, current->nsproxy->pid_ns);
}
例子如下:
4个函数调用关系图如下: