如何避免共享内存泄漏

问题描述 投票:3回答:2

我在Suse Linux上的2个进程之间使用共享内存,我想知道如果一个进程崩溃或两者都崩溃,我怎么能避免共享内存泄漏。在这种情况下是否发生泄漏?如果是,我该如何避免呢?

linux shared-memory
2个回答
1
投票

您可以为共享内存区域中的两个计数器分配空间:每个进程一个。每隔几秒钟,每个进程递增其计数器,并检查另一个计数器是否也已递增。这使得这两个进程或外部监视器很容易在有人崩溃或退出时拆除共享内存。


0
投票
  • 如果子进程是来自父进程的简单fork(),则mmap()MAP_SHARED应该有效。
  • 如果子进程执行exec()以启动不同的可执行文件,您通常可以从shm_open()或类似的非可移植系统调用传递文件描述符(请参阅Is there anything like shm_open() without filename?)在许多操作系统(包括Linux)上,您可以从shm_unlink() shm_open()文件描述符,以便它当进程死亡时,不会泄漏内存,并使用fcntl()清除shm文件描述符上的close-on-exec标志,以便您的子进程可以跨exec继承它。这在POSIX标准中没有明确定义,但在实践中似乎非常便携。
  • 如果您需要使用文件名而不仅仅是文件描述符号来将共享内存对象传递给不相关的进程,那么当不再需要文件时,您必须自己找出shm_unlink()文件的一些方法;请参阅John Zwinck对一种方法的回答。
© www.soinside.com 2019 - 2024. All rights reserved.