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

zer*_*lus 3 kernel process linux-kernel

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

bof*_*.at 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);
Run Code Online (Sandbox Code Playgroud)