我们是不是应该在分叉进程终止之前分离共享内存

Posted

技术标签:

【中文标题】我们是不是应该在分叉进程终止之前分离共享内存【英文标题】:Should we detach shared memory before termination of a forked process我们是否应该在分叉进程终止之前分离共享内存 【发布时间】:2012-12-02 16:36:44 【问题描述】:

假设我们请求共享内存并将其附加到我们程序的主进程。

这个程序创建了几个进程。 正如 shmat 手册所说

在 fork(2) 之后,子进程继承附加的共享内存段。

因此我们不必将共享内存附加到子进程。 但是拆下来怎么办?我们是否也应该在孩子的代码中这样做? 或者只是在主进程中分离共享内存并销毁它就足够了?

【问题讨论】:

分离共享内存段就像关闭打开的文件句柄 - 大多数操作系统内核会在进程终止(有意或无意)时自动执行,但良好的编程习惯要求您明确地执行此操作。跨度> @HristoIliev:我也是这么想的。离开它而不分离会导致指针悬空。 【参考方案1】:

这真的取决于你在做什么。但是,如果您调用 execve 或其表亲之一,它将分离共享内存段。

【讨论】:

我根本没有调用 execve。子进程退出后,它完成了它的工作(它是一个客户端 - 服务器分配)

以上是关于我们是不是应该在分叉进程终止之前分离共享内存的主要内容,如果未能解决你的问题,请参考以下文章

IPC:共享内存终止进程通知

安卓执法仪录像之进程间共享内存

安卓执法仪录像之进程间共享内存

安卓执法仪录像之进程间共享内存

C: 多个分叉

是否可以为进程间通信提供共享全局变量?