【问题标题】:Memory Monitoring for each process in linuxlinux中每个进程的内存监控
【发布时间】:2017-09-23 20:29:02
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    对于当前进程以外的进程,请使用/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 帖子相似但不完全相同。

    【讨论】:

    • 感谢您的回答。我确实知道这也是这样做的方法。但是,有没有其他方法可以读取 /proc 文件系统。我认为可能有办法通过使用内核函数来做到这一点。 @dlasalle
    • 另一种方式:非常仔细地查看过程控制块以及如何访问它们。仔细查看进程的“内存中”布局。
    【解决方案2】:

    这是标准错误的内核代码(忽略锁定要求等)。函数名称和预期用途强烈暗示这只是一项大学作业。还有其他几个人提出了类似质量的问题。

    因为每次很明显提出要求的人根本没有准备好做这项工作,所以每次我问谁给他们分配了任务以及他们提供了哪些材料。

    你能回答上面的问题吗?

    谢谢。

    编辑

    请参阅此内容以了解此类代码示例有什么问题的一般概述: http://codingtragedy.blogspot.com/2016/12/bad-kernel-tutorials-for-beginners.html

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

    【讨论】:

    • 是的,这是大学作业。讲师给了这个作业,他没有提供任何东西。学生必须自行安装和学习内核。没有内核讲座,只有关于操作系统的基本知识。希望这能澄清。
    • 我不想给你添麻烦,但我想向你的讲师提供联系信息,询问他这门课程的最新情况。
    • 抱歉,我没有讲师的联系方式。大部分工作都由 TA 监督,但 TA 也很忙,为什么除了这个地方我没有其他地方可以问了。
    猜你喜欢
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2016-07-24
    • 1970-01-01
    相关资源
    最近更新 更多