我想实现我的内核以便能够监视每个进程的内存。但是,我所能做的就是只打印出进程和pid。我找不到可以帮助监控内存的功能。这是我实现的内核中的代码。我使用Linux内核版本4.11.0-rc7。
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/resource.h>
#include <linux/sched.h>
#include <linux/syscalls.h>
asmlinkage long sys_listProcessInfo(void){
struct task_struct *process;
struct rusage usage;
int i = 0;
for_each_process(process){
if(i%10 == 0){
printk("Process %s\n PID: %ld\n",process->comm,(long)task_pid_nr(process));
i++;
}
}
return 0;
}
这个只能查看进程和pid。我想知道是否有任何函数可以查找进程的内存。提前谢谢。
答案 0 :(得分:0)
对于当前进程以外的进程,请使用/proc
文件系统。
char fName[32]; // you should really only need 24
sprintf(fName, "/proc/%d/status", pid);
FILE* status = fopen(fName , "r" );
该文件将包含有关进程内存分配的信息(虚拟,驻留等)。有关详细信息,请参阅man7's page on /proc。
这与this帖子类似但不完全相同。
答案 1 :(得分:0)
这是标准的错误内核代码(忽略锁定要求等)。功能名称和预期目的强烈暗示这只是一项大学任务。还有其他几个人提出了类似质量的问题。
每次很清楚,询问的人基本上没有准备好做这项工作,每次我问谁给了他们任务,他们提供了什么材料。
你能否回答上述问题?
感谢。
修改
有关此类代码示例的错误概述,请参阅此内容: http://codingtragedy.blogspot.com/2016/12/bad-kernel-tutorials-for-beginners.html
此网站不适用于与内核相关的问题(或大多数较低级别的问题)。我担心你必须咨询你的同学。最好是有人会确保这类任务没有分配给没有准备的学生,甚至根本没有。