Linux内核模块列出给定pid的子代

问题描述 投票:0回答:1

我正在尝试实现一个以pid作为输入参数并在加载模块时列出所有子pid的模块,即,调用了insmod。但是,我不知道如何实现这一目标。我通过看一些教程尝试了一些东西。

到目前为止,我能够获取输入,加载模块并通过其pid查找任务。我无法做的是:我无法列出儿童pids。

这是我的初始化函数:

int pid_init(void){

    if(pid == -1){
        printk(KERN_ALERT "No input entered!\n");
        return 0;
    }

    struct pid *pid_struct = find_get_pid(pid);
    struct task_struct *parent = pid_task(pid_struct, PIDTYPE_PID);

    if(parent == NULL){
        printk(KERN_ALERT "No process found!\n");
        return 0;
    }

    struct task_struct *task;
    struct list_head *list;

    printk(KERN_INFO "%d\n", parent->pid);

    list_for_each(list, &parent->children) {
        task = list_entry(list, struct task_struct, sibling);
        printk(KERN_INFO "%d\n", task->pid);
    }


   return 0;
}

我尝试了以下pid:(pstree -p的输出]

├─udisksd(783)─┬─{udisksd}(792)
               ├─{udisksd}(795)
               ├─{udisksd}(898)
               └─{udisksd}(920)

当我打电话:sudo insmod module.ko pid=783

输出是:783,它是由我打印的,因此它意味着未调用list_for_each

但是,当我三次调用sleep 100 &并用sudo insmod module.ko执行pid=<bash>时>

然后我可以列出sleep 100 &通话的pid。最后,如果您需要了解,我将使用Ubuntu

我正在尝试实现一个以pid作为输入参数的模块,并在加载该模块时列出所有子pid,即调用insmod。但是,我不知道如何实现这一目标。我...

c linux process kernel pid
1个回答
0
投票
pstree ${pid}   
© www.soinside.com 2019 - 2024. All rights reserved.