3

也许我只是在谈论这个错误。

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

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

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

4

1 回答 1

4

如果您只是转向内核空间编程,您可能需要很长时间才能习惯以正确的方式做事。/proc 只是内核空间数据结构的一个接口,并且是一个不方便的接口(所有的 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); 
}

您还可以通过 pid using 找到特定任务find_task_by_pid_ns,但您必须担心 pid 命名空间。还有get_current,它会找到你当前正在执行的任务。

于 2012-09-10T08:56:40.223 回答