繁体   English   中英

子进程,fork和exec的内存使用情况

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM