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

时间:2015-12-13 05:38:34

标签: c++ linux kernel fork

在调用fork和exec之后,如何测量子进程使用的内存?基本上我希望能够编写与以下

对应的代码
if (!fork()) {

    // run child process
    exec();
} else {

    while (child active) {
        print memory used by child
    }
}

这里有两件我不知道的事情,如何查看子进程是否已完成运行?我是否必须在此处使用某种流程级互斥?如果是,那么我可以使用什么结构?我可以将OS文件系统用于此目的吗?

此外,我正在查看此链接Differences between fork and exec的答案,在第8段中,作者说当进程调用fork而不调用exec时,copy on write非常有用。但是在父调用fork并且不调用exec的情况下,这不是更正确吗?当父调用exec时,子节点的虚拟地址空间被删除并替换为新程序加载到内存中的那个正确吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

关于上述评论链,我显然无法回复,因为我没有50个代表:

父项中fork的返回值(如果成功)是子项的PID。您应该保存返回值,这样您就可以1。等待正确的孩子(如果你有一个以上),和2。看看fork是否失败(在这种情况下你可能不想循环直到孩子退出)。

您还可以使用信号来确定孩子何时死亡,而不是继续尝试等待WNOHANG选项。该进程将在终止(或停止)时将SIGCHLD发送给父进程,如果它已经死亡,那么您可以使用waitpid等待它并停止循环。见:
man 7信号
男人2 sigaction
有关这方面的更多信息。

关于内存使用情况,似乎你要么/ proc / [pid] / statm或/ proc / [pid] / stat。

man 5 proc将为您提供有关这些文件中的内容的所有信息。