内存监控linux中的每个进程

时间:2017-04-26 12:24:20

标签: c linux linux-kernel operating-system kernel

我想实现我的内核以便能够监视每个进程的内存。但是,我所能做的就是只打印出进程和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。我想知道是否有任何函数可以查找进程的内存。提前谢谢。

2 个答案:

答案 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

此网站不适用于与内核相关的问题(或大多数较低级别的问题)。我担心你必须咨询你的同学。最好是有人会确保这类任务没有分配给没有准备的学生,甚至根本没有