c - 列出给定 pid 的子进程的 Linux 内核模块
问题描述
我正在尝试实现一个将 pid 作为输入参数的模块,并在加载模块时列出所有子 pid,即调用 insmod。但是,我不知道如何实现这个目标。我通过查看一些教程尝试了一些东西。
到目前为止,我能够获取输入、加载模块并通过其 pid 查找任务。我不能做的是:我不能列出儿童 pid。
这是我的初始化函数:
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
以防您需要知道。
解决方案
推荐阅读
- python - Python - is there a way to identify the directionality of angles?
- c# - 浏览器崩溃检测服务器端c#
- python - for filename in os.listdir FileNotFoundError: [Errno 2] No such file or directory
- prisma - 是否可以访问有关 prisma 模型的元数据?
- flutter - 为什么 crossAxisAlignment 和 mainAxisAlignment 在行和列中不同
- python - 为什么我的 PyGame 应用程序根本没有运行?
- php - 将数据从给定 ID 更新到具有相同 ID CodeIgniter 3 的另一个表
- javascript - POST 请求在 nodejs 中无法使用 expressjs 和 bodyparser
- git - Visual Studio 2019 中的 Azure DevOps 错误
- codeigniter - 使用 WINDOWS OS 10 中的 Google Cloud SDK 部署 Google App Engine 柔性环境失败