[英]Memory usage by a child process, fork and exec
调用fork和exec后,如何测量子进程使用的内存? 基本上我希望能够编写与以下内容相对应的代码
if (!fork()) {
// run child process
exec();
} else {
while (child active) {
print memory used by child
}
}
我在这里不知道两件事,如何查看子进程是否已完成运行? 我是否需要在这里使用某种过程级互斥? 如果是,那么我可以使用什么结构? 我可以仅将OS文件系统用于此目的吗?
我也在这个链接上寻找答案, 在fork和exec之间的区别 ,在第8段中,作者说,当进程调用fork而没有调用exec时,写时复制非常有用。 但是,在父级调用fork而不调用exec的情况下,这不是真的吗? 当父级调用exec时,子级的虚拟地址空间将被清除,并替换为新程序加载到内存后生成的虚拟地址空间正确吗?
谢谢!
关于以上评论链,我显然无法回复,因为我没有50个代表:
如果成功,则父级中fork的返回值是子级的PID。 您可能应该保存返回值,以便可以
1.等待正确的孩子(如果您有多个孩子),并且
2.查看fork是否失败(在这种情况下,您可能不想在孩子退出之前循环播放)。
您也可以使用信号来判断孩子何时死亡,而不是连续尝试使用WNOHANG选项等待。 该进程将在终止(或停止)时将SIGCHLD发送给父进程,如果该进程死亡,则可以使用waitpid等待它并停止循环。 看到:
男子7信号
男人2 sigaction
有关更多信息。
关于内存使用情况,您似乎想要/ proc / [pid] / statm或/ proc / [pid] / stat。
man 5 proc将为您提供有关这些文件中内容的所有信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.