如果其中一个进程意外死亡,进程间内存会发生什么?

时间:2013-02-26 11:56:45

标签: c++ linux shared-memory

如果你对动机感兴趣我会在接下来的几句话中详细阐述它,如果不是只是跳到Q.

我正在考虑制作快速记录器但是在程序崩溃时没有受到影响的记录器(也就是少数最后一次记录消息不会丢失)。所以我的想法是写入共享内存(ringbuffer)并从中读取另一个低prio进程并进行转储。 但为了工作,我需要知道如果一个进程退出(正常退出,SEGFAULT),共享内存会发生什么......

所以我的问题是: 当其中一个触发器死亡时,共享内存会发生什么(在Linux中,但你也可以在A中获胜)是UB吗?

3 个答案:

答案 0 :(得分:6)

  

当其中一个过程死亡时,共享内存会发生什么变化(在Linux中,但是你也可以使用A for Win)?

无。当进程终止时,共享内存保持不变。它被映射为/dev/shm/目录下的文件。在系统重新启动时,或者当所有进程取消映射共享内存文件并调用shm_unlink()时,它将被删除。

  

是UB吗?

不,它定义明确。请参阅man page for shm_overview(7)

  

POSIX共享内存对象具有内核持久性:共享内存对象将一直存在,直到系统关闭,或者直到所有进程都已取消映射该对象并且已使用shm_unlink删除它(3)

答案 1 :(得分:2)

答案 2 :(得分:1)

如果您使用文件作为mmap的支持,那么在过程正常退出的情况下,最后一个msyncmunmap的所有内容都可供独立进程使用。

因此,当进程崩溃时,共享内存应该没有问题。