我有两个问题:
使用shm_open时,如何知道我是否已经打开了一个已经存在的共享内存,我正在使用O_CREATE | O_RDWR。
我正在使用shm_open创建/打开一个带有某个名称和mmap的共享内存对象,以便将其映射到进程'虚拟地址空间。如果进程崩溃并且无法清除共享内存,则会一直停留,直到系统关闭。虽然这与wiki上提到的内容相矛盾,后者说," shm_open创建的共享内存是持久的。它一直保留在系统中,直到被进程明确删除。这有一个缺点,如果进程崩溃并且无法清理共享内存,它将一直保持到系统关闭。为避免此问题,可以使用mmap创建共享内存"。我在谈论shm_open中提到的名称的文件,它在/ dev / shm中创建,如果进程崩溃而没有清理共享内存(unmap和shm_unlink),它仍然存在。我期待,如果任何进程没有其他对共享内存的引用,并且崩溃的进程是唯一引用的进程,则应该清除共享内存对象和文件。
答案 0 :(得分:2)
我知道这个答案很晚,但是我正忙于同一主题。
根据{{3}},使用O_EXCL
oflag检测共享内存对象是否已经存在。