我写了一个程序名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创建的线程不会出现在内核进程列表中。这个意见是否正确?
答案 0 :(得分:0)
线程也由内核中的struct task
表示。您可以使用例如迭代任务中的每个线程。 while_each_thread宏:
struct task_struct *task = ...;
struct task_struct *t = task;
do {
//use t
} while_each_thread(task, t);
注意:我不知道你需要能够像这样迭代任务结构的正确锁定(如果有的话)。