无法扫描task_struct链

时间:2017-11-17 02:32:30

标签: c linux linux-kernel linux-device-driver kernel-module

我试图在没有有用API的情况下获取内核模块中所有PID的列表。

代码在这里。我尝试在sibling中扫描与children / struct task_struct成员关联的所有现有task_struct对象。

#include <linux/init.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/init_task.h>

MODULE_LICENSE("Dual BSD/GPL");

#define MODNAME "list_pid"
#define MINOR_COUNT 1

static void printk_pid_children(struct task_struct *parent_ts){
    struct task_struct *fst = container_of(parent_ts->children.next, struct task_struct, sibling);
    struct task_struct *t = fst;
    if(fst != parent_ts){
        do { 
            printk("%d,", t->tgid);
            printk_pid_children(t);
            t = list_next_entry(t, sibling);
        } while(t != fst);
    }
}

static int __init list_pid_init(void){
    printk("%s\n",__func__);
    printk("%d,", init_task.pid);
    printk_pid_children(&init_task);
    printk("\n");

    return 0;
}
module_init(list_pid_init);

static void __exit list_pid_exit(void){
}
module_exit(list_pid_exit);

然而,在sudo insmod list_pid.ko之后,系统挂断。 上面的代码有什么问题?

谢谢。

0 个答案:

没有答案