gpt4 book ai didi

linux-kernel - 从模块中读取/处理

转载 作者:行者123 更新时间:2023-12-04 03:05:56 25 4
gpt4 key购买 nike

也许我只是做错了。

我有一个 Linux 模块 (Ubuntu 12.04) 需要收集有关当前进程的信息,例如每个进程打开的文件数等。我认为最好的方法是让模块读取/proc 并为那里表示的每个进程在/proc 子目录中查找它想要的信息。

显然我的模块不能调用 opendir/readdir。我以为有一个 proc_readdir() 可以从内核空间使用,但我似乎找不到任何关于它的信息。

我错过了什么吗?有没有更好的方法让模块收集进程信息?如果它是 proc_readdir() 那么我在哪里可以找到它的一些例子?

最佳答案

如果您只是转向内核空间编程,您可能需要相当长的时间才能习惯以正确的方式做事。/proc 只是内核空间数据结构的一个接口(interface),而且是一个不方便的接口(interface)(所有 ASCII 都是什么)。当您在内核中时,您可以直接访问您想要的数据。

您应该查看进程 task_struct 条目(参见 http://lxr.linux.no/linux+v3.5.3/include/linux/sched.h )。如果您想遍历每个进程,请尝试以下操作:

struct task_struct *task;
for_each_process(task) {
printk(KERN_INFO "Process %i is named %s\n", task->pid, task->comm);
}

您还可以使用 find_task_by_pid_ns 通过 pid 查找特定任务,但您必须担心 pid namespace 。还有 get_current,它会为您找到当前正在执行的任务。

关于linux-kernel - 从模块中读取/处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12192637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com