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

最佳答案

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

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


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


然后,主机所需要的只是通过中介程序派生其每个子进程,该中介程序将运行预期的子进程并报告内存使用情况。

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

我想如果这是Linux或兼容版本,您也可以在/proc/<pid>/mem中窥探一下。

10-04 10:08