Linux kernel 如何访问Linux内核数据结构?

Linux kernel 如何访问Linux内核数据结构?,linux-kernel,kernel,kernel-module,Linux Kernel,Kernel,Kernel Module,我想打印每个进程的信息以及该进程在运行时正在执行的操作。i、 e.该进程连续读/写哪个文件 为此,我正在编写一个内核模块 有人知道如何在内核模块中访问这些信息,或者如何在我的内核模块中访问进程表数据结构吗 任务的伪代码如下所示: 1. get each process from /proc. 2. Access the data structure of that process i.e. process table and all 3. print what that process is d

我想打印每个进程的信息以及该进程在运行时正在执行的操作。i、 e.该进程连续读/写哪个文件

为此,我正在编写一个内核模块

有人知道如何在内核模块中访问这些信息,或者如何在我的内核模块中访问进程表数据结构吗

任务的伪代码如下所示:

1. get each process from /proc.
2. Access the data structure of that process i.e. process table and all
3. print what that process is doing i.e. which file it is accessing (i.e. reading or writing) at rutime.
请看一个例子


它具体展示了如何创建一个内核模块,该模块打印进程的打开文件(并依赖于从我在评论中提到的当前宏中获得的task_struct struct)。这可以被操作成更复杂的东西,可以通过进程任务结构访问。

/include/linux/sched.h

中声明的每个进程都有一个名为
的宏

通过使用此宏,可以遍历所有进程的
任务结构


您不能使用宏吗?请看一下我刚才添加的伪代码。我猜“current”将提供对当前流程数据结构的访问。请查看下面答案中的示例是否满足用例,我认为它满足。是的,但是如果我想访问其他流程数据结构,它是否会在这种情况下工作?尽管我会尝试这个例子,但当前宏查看当前进程的内核堆栈地址,然后切断最后13位以获得PCB(进程的任务结构)地址,因为它们都“存在”在同一个8K中。其他进程的任务结构可以访问,例如通过PIDs(请参阅)。