【问题标题】:kernel: how to find all threads from a process's task_struct?内核:如何从进程的 task_struct 中找到所有线程?
【发布时间】:2012-01-17 11:27:27
【问题描述】:

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

【问题讨论】:

    标签: process linux-kernel kernel


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 2012-10-17
      • 2019-10-25
      • 2016-07-12
      相关资源
      最近更新 更多