【问题标题】:calculate the amount of memory used by a particular process in linux计算linux中特定进程使用的内存量
【发布时间】:2012-02-27 14:17:57
【问题描述】:

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

这是我的计划。

让父进程跟踪子进程,

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

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

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

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

但是这让我很困扰

  1. 我不知道如何计算。

  2. SYS_mmap2 有超过 6 个参数,我该如何获取呢?

【问题讨论】:

  • 有什么问题,例如解析ps的输出?
  • @DietrichEpp,至少你应该使用libprocps4-dev之类的库,而不是读取ps的输出。

标签: c linux ptrace


【解决方案1】:

要确定 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命令

【讨论】:

  • pmap 返回的[stack] 是我想要的。
  • [stack] 也在 /proc/1234/maps 内部,pmap 实际读取。
猜你喜欢
  • 1970-01-01
  • 2018-05-27
  • 2023-03-27
  • 2020-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
相关资源
最近更新 更多