计算linux中特定进程使用的内存量

时间:2012-02-27 14:17:57

标签: c linux ptrace

我正在编写一个程序来跟踪子进程调用的每个系统调用,并确定它的确切内存使用情况(不包括共享内存)。

这是我的计划。

让父进程进行子进程,

如果子进程进行系统调用,父进程将收到SIGTRAP,

然后使用ptrace获取系统调用ID(PTRACE_PEEKUSER,child_pid,4 * ORIG_EAX,NULL)。

当id等于SYS_brk,SYS_sbrk,SYS_mmap2,SYS_mmap,SYS_mremap,SYS_munmap,

我能够获取呼叫参数并计算内存使用量。

但这让我很烦恼

  1. 我不确定如何计算。

  2. SYS_mmap2有超过6个参数,我该怎么办呢?

1 个答案:

答案 0 :(得分:2)

为了确定pid 1234进程的内存使用情况,我建议按顺序阅读并解析/proc/1234/maps/proc/1234/smaps伪文件。 /proc/1234/下的其他文件也可能相关(例如/proc/1234/statm/proc/1234/status

从流程内部,您可以阅读/proc/self/maps/proc/self/smaps(例如/proc/self/statm/proc/self/status)。

阅读proc(5)手册页了解详情。

还有pmap命令