我在Suse Linux上的2个进程之间使用共享内存,我想知道如果一个进程崩溃或两者都崩溃,我怎么能避免共享内存泄漏。在这种情况下是否发生泄漏?如果是,我该如何避免呢?
您可以为共享内存区域中的两个计数器分配空间:每个进程一个。每隔几秒钟,每个进程递增其计数器,并检查另一个计数器是否也已递增。这使得这两个进程或外部监视器很容易在有人崩溃或退出时拆除共享内存。
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对一种方法的回答。