进程管理API之find_task_by_vpid
2017-11-25 09:03
513 查看
struct task_struct *find_task_by_vpid(pid_t vnr),在当前task的namespace下根据vpid找到对应的task 其使用的例子如下: SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages, const void __user * __user *, pages, const int __user *, nodes, int __user *, status, int, flags) { struct task_struct *task; struct mm_struct *mm; int err; nodemask_t task_nodes; /* Check flags */ if (flags & ~(MPOL_MF_MOVE|MPOL_MF_MOVE_ALL)) return -EINVAL; if ((flags & MPOL_MF_MOVE_ALL) && !capable(CAP_SYS_NICE)) return -EPERM; /* Find the mm_struct */ rcu_read_lock(); task = pid ? find_task_by_vpid(pid) : current; if (!task) { rcu_read_unlock(); return -ESRCH; } } 其源码分析如下: struct task_struct *find_task_by_vpid(pid_t vnr) { return find_task_by_pid_ns(vnr, task_active_pid_ns(current)); } 可以看出find_task_by_vpid 仅仅是find_task_by_pid_ns的包装,是用当前task 所在的namespace中查找vnr对应的task. 由于仅仅是find_task_by_pid_ns的包装,所以再调用find_task_by_vpid的时候同样需要rcu_read_lock/rcu_read_unlock 的保护
相关文章推荐
- 进程管理API之find_task_by_pid_ns
- 进程管理API之find_vpid
- 进程管理API之get_task_pid
- find_task_by_vpid undefined 问题
- prjProcess - 进程管理 - Written By HackerJLY In Universty - VB6 + API
- 进程管理API之pid_task
- 进程管理API之find_get_pid
- 进程管理API之__task_pid_nr_ns
- 进程管理API之get_task_mm
- 进程管理API之find_pid_ns
- 进程管理API之get_pid_task
- 进程管理API之task_active_pid_ns
- 进程管理API之task_tgid_nr_ns
- 进程管理API之find_ge_pid
- ArcGIS API For JavaScript——空间查询(FindTask和IdentifyTask)
- 进程管理—进程描述符(task_struct)
- Linux进程管理之task_struct
- linux内核学习之进程管理------task_struct结构体
- ArcGIS.Server.9.3和ArcGIS API for JavaScript实现查询定位中心的功能和FindTask功能应用(七)
- Linux进程管理描述符 task_struct