【发布时间】:2016-03-18 19:55:01
【问题描述】:
在调用 fork 和 exec 后如何测量子进程使用的内存?基本上我希望能够编写对应于以下的代码
if (!fork()) {
// run child process
exec();
} else {
while (child active) {
print memory used by child
}
}
这里有两件事我不知道,如何查看子进程是否已经运行完毕?我是否必须在这里使用某种进程级别的互斥?如果是,那么我可以使用什么结构?我可以只使用操作系统文件系统吗?
我还在此链接Differences between fork and exec 上查看答案,在第 8 段中,作者说当进程调用 fork 而不调用 exec 时,写时复制很有用。但是在父调用fork而不调用exec的情况下,这不是更真实吗?当父调用 exec 时,子的虚拟地址空间被清除并替换为新程序加载到内存中产生的虚拟地址空间正确吗?
谢谢!
【问题讨论】:
-
只使用 C 或 C++ 标签;它们是不同的语言。 fork 教程应该提到
wait,你用来判断你的孩子是否已经死亡的函数。检查子进程的已用内存与检查任何其他进程的内存相同(例如/proc) -
谢谢!我不知道 /proc 目录。是否有阻止方法来检查孩子是否已经死亡?去掉了标签!我打算使用 C++ 标记,但不小心添加了两者...
-
使用
WNOHANG参数。见man 2 wait -
在某些情况下进行非阻塞检查的另一种方法是:
kill(child_pid,0)并查找ESRCH错误 -
另外如何检查proc目录中的内存使用情况?