一. 预备知识
task struct中定义的thread group 成员(task->group_leader)。
通过该指针,一个线程总是很容易的找到其对应的线程组leader,而线程组leader对应的pid就是该线程的process ID。
二.kernel中获取进程/线程ID
// 传入进程任何一个线程pid, 并查找进程PID(就是进程中leader线程的PID)
struct pid *current_pid = find_get_pid(input_pid);
struct task_struct *current_task = pid_task(current_pid, PIDTYPE_PID);//获取进程任务描述符
struct pid* parent = get_task_pid(current_task->parent, PIDTYPE_PID);//获取进程pid描述符
pr_info("parent pid: %d\n", pid_nr(parent));
// 查找其他线程的PID
struct task_struct *t = current_task;
while((t=next_thread(t)) != current_task) {
struct pid* pid = get_task_pid(t, PIDTYPE_PID);//获取线程pid描述符
pr_info("thread pid: %d\n", pid_nr(pid));
}