当我创建一个新的用户空间thead时,它会出现在内核进程列表中吗?

时间:2017-03-23 08:08:43

标签: c linux multithreading

我写了一个程序名test.c.在这个程序中,我通过pthead_create创建了三个线程。这些线程由prctl命名为thread0,thread1,thread2(PR_SET_NAME,name)。线程函数代码如下:

    void *output(void *arg) {

            char *x = (char *) arg;
            char name[40] = "thread";
            strcat(name, x);
            prctl(PR_SET_NAME, name);
            while(1){
                    printf("%s\n", name);
                    sleep(10000);
            };
    }

然后我编写了一个内核模块print.c,其功能是打印每个task_struct信息int内核进程列表。代码如下:

    struct task_struct *task = &init_task;

    do{
            printk("%s\n", task->comm);
    }while((task=next_task(task)) != &init_task);

我首先正确运行程序test.c,然后正确地修改模块print.ko。出乎意料的是,我没有找到三个主题'信息。所以,我想问一下pthread_create创建的线程不会出现在内核进程列表中。这个意见是否正确?

1 个答案:

答案 0 :(得分:0)

线程也由内核中的struct task表示。您可以使用例如迭代任务中的每个线程。 while_each_thread宏:

struct task_struct *task = ...;
struct task_struct *t = task;
do {
    //use t
} while_each_thread(task, t);

注意:我不知道你需要能够像这样迭代任务结构的正确锁定(如果有的话)。