首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++中查找类似getrusage()的内容

在C++中查找类似getrusage()的内容
EN

Stack Overflow用户
提问于 2011-04-30 12:16:31
回答 3查看 1.3K关注 0票数 0

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

EN

回答 3

Stack Overflow用户

发布于 2011-04-30 12:27:46

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

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

  • forks
  • execs所请求的程序,可能是以nicetime命令的形式传递的命令行参数(程序及其参数)
  • 父进程为其子进程执行getrusage()。因为只有一个,所以这是预期的结果。然后使用某种机制将信息传回主程序,可能是状态文件。

然后,所有需要做的就是让主程序通过中介派生出它的每个子进程,该中介被指示运行预期的子进程并报告内存使用情况。

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-07-13 17:26:16

您可以使用wait3wait4,详见另一个SO线程:CPU time after the process finished

票数 1
EN

Stack Overflow用户

发布于 2011-04-30 13:00:20

当您对每个子进程执行fork()操作时,父进程将获得PID。您可以使用它来查询/proc文件系统,特别是/proc/{pid}/status (以及可能的其他文件系统,这取决于您想要的特定指标)。

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

代码语言:javascript
复制
VmSize:    2788 kB
VmLck:        0 kB
VmRSS:     1280 kB
VmData:     252 kB
VmStk:       16 kB
VmExe:      268 kB
VmLib:     2132 kB
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5839457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档