gpt4 book ai didi

c++ - 子进程、fork 和 exec 的内存使用情况

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:58 26 4
gpt4 key购买 nike

调用 fork 和 exec 后如何测量子进程使用的内存?基本上我希望能够编写对应于以下内容的代码

if (!fork()) {

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

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

这里有两点我不知道,如何查看子进程是否运行完毕?我必须在这里使用某种进程级互斥吗?如果是,那么我可以使用什么结构?我可以为此目的只使用操作系统文件系统吗?

我也在这个链接上查看答案 Differences between fork and exec ,在第 8 段中,作者说当进程在不调用 exec 的情况下调用 fork 时,写时复制很有用。但是在父调用fork而不调用exec的情况下,这不是更正确吗?当父级调用 exec 时,子级的虚拟地址空间被清除并替换为加载到内存中的新程序产生的地址空间,对吗?

谢谢!

最佳答案

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

parent中fork成功返回值为child的PID。您可能应该保存返回值,这样您就可以
1。等待正确的 child (如果您有多个 child ),以及
2。查看 fork 是否失败(在这种情况下,您可能不想循环直到子进程退出)。

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

关于内存使用,您似乎想要/proc/[pid]/statm 或/proc/[pid]/stat。

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

关于c++ - 子进程、fork 和 exec 的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34248332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com