对于给定的线程组,我需要获取其每个成员线程的顺序索引,以从内核内部存储有关每个线程的一些数据,我可以访问
task_struct
。像“第 0 个线程首先创建,第 1 个线程第二个创建,...”之类的东西可以正常工作。
从一个线程组中区分线程的一种方法显然是引用它们的进程ID,但是,进程ID不是连续的,而我想获得某种按顺序依次排序的标识符(索引)。
线程在创建时被添加到其父级的
p->signal->thread_head
线程列表尾部(此处代码),因此您可以简单地使用 for_each_thread(p, t)
迭代线程。假设您已经掌握了线程组领导者的task_struct
,这非常简单:
struct task_struct *thread;
unsigned thread_idx = 0;
for_each_thread(leader, thread) {
// ... code here ...
thread_idx++;
}