内核:如何从进程的task_struct中找到所有线程?

2024-02-13

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


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

不管怎样,有一个叫做线程组的东西,以及一个特殊的标志来调用clone(),它表明新进程属于同一个线程组。此机制通常用于将通过在位掩码中指定 CLONE_THREAD 的 clone() 创建的所有任务放在一起。 对于这个线程,存在宏while_each_thread in the linux/sched/signal.h包含文件。它的使用方式如下:

struct task_struct *me = current;
struct task_struct *t = me;
do {
    whatever(t);
} while_each_thread(me, t);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

内核:如何从进程的task_struct中找到所有线程? 的相关文章

随机推荐