在C ++中寻找类似getrusage()的东西

时间:2011-04-30 04:16:31

标签: c++ memory

getrusage()可以显示进程子进程使用的内存量。我正在创建一个shell,我将从中启动几个子程序。 getrusage()将报告所有这些孩子正在使用的内存总量,这不是我想要的。我想知道每个孩子使用多少记忆。 getrusage()看起来像我想要使用的东西,除了它不适用于单个子进程。什么是可以使用的?

3 个答案:

答案 0 :(得分:1)

也许你可以一次分开一个孩子,然后用getrusage(RUSAGE_CHILDREN...)独立地找出每个孩子的用法。

这种方法最明显的缺点是如果孩子需要同时跑步。在这种情况下,自定义编写的中间程序可以做到这一点。而不是直接执行子项,执行以下程序:

  • exec s请求的程序,可能以nicetime命令
  • 的样式作为命令行参数(程序及其参数)传递
  • 父级为其子级执行getrusage()。由于只有一个,这是理想的结果。然后使用某种机制将信息传递回主程序,也许是一个状态文件。

然后,所需要的只是让主人通过中介来分叉每个孩子,该中间人被指示运行目标孩子并报告内存使用情况。

重点是重新调整子进程的层次结构,以便调用getrusage()的程序只有一个子进程。主程序不能,因为它有太多的子节点,没有系统调用来通过pid获取内存使用。

我想如果这是Linux或兼容的话,你也可以在/proc/<pid>/mem中窥探。

答案 1 :(得分:0)

当您fork()每个子进程时,父进程获得PID。您可以使用它来查询/proc文件系统,特别是/proc/{pid}/status(可能还有其他文件系统,具体取决于您追踪的具体指标)。

这将为您提供各种信息,包括:

VmSize:    2788 kB
VmLck:        0 kB
VmRSS:     1280 kB
VmData:     252 kB
VmStk:       16 kB
VmExe:      268 kB
VmLib:     2132 kB

答案 2 :(得分:0)

您可以使用wait3wait4,详见此其他SO帖子:CPU time after the process finished