kernel:如何从进程的task_struct中查找所有线程?

时间:2011-12-10 16:13:42

标签: process linux-kernel kernel

给定进程或线程的任务结构,迭代属于同一进程的所有其他线程的成语是什么?

1 个答案:

答案 0 :(得分:13)

Linux不区分进程(任务)和线程。库调用fork()和pthread_create()使用相同的系统调用clone()。 fork()和pthread_create()之间的区别是传递给clone()的位掩码。此位掩码描述了哪些资源(内存,文件,文件系统,信号处理程序......)。有关详细信息,请参阅man clone(2)。

无论如何,有一个称为线程组和clone()调用的特殊标志,表示新进程属于同一个线程组。此机制通常用于将使用clone()在位掩码中指定CLONE_THREAD创建的所有任务保持在一起。 对于此线程,sched.h包含文件中存在宏* while_each_thread *。它的使用方式如下:

struct task_struct *me = current();
struct task_stuct *t = me;
do {
    whatever(t);
}while_each_thread(me, t);