getrusage()可以显示进程的子级使用的内存量。我正在创建一个外壳程序,将从中启动几个子程序。 getrusage()将报告所有这些子项正在使用的内存总和,这不是我想要的。我想知道每个孩子正在使用多少内存。 getrusage()看起来像我要使用的东西,但它不适用于单个子进程。可以使用什么样的效果?
最佳答案
也许您可以一次分叉一个孩子,然后使用getrusage(RUSAGE_CHILDREN...)
来独立找出每个孩子的用法。
这种方法最明显的缺点是,如果孩子们需要同时跑步。在这种情况下,可以编写一个定制的中间程序。而不是直接执行子级,而是执行以下程序:
叉子exec
所请求的程序,可能以nice
或time
命令的样式作为命令行参数(程序及其参数)传递
父级为其子级执行getrusage()
。由于只有一个,因此是理想的结果。然后使用某种机制将信息传递回主程序,也许是状态文件。
然后,主机所需要的只是通过中介程序派生其每个子进程,该中介程序将运行预期的子进程并报告内存使用情况。
关键是重新调整子进程的层次结构,以便调用getrusage()
的程序只有一个子进程。主程序不能,因为它有太多子级,并且没有系统调用来通过pid获取内存使用情况。
我想如果这是Linux或兼容版本,您也可以在/proc/<pid>/mem
中窥探一下。