如果你对动机感兴趣,我会在接下来的几句话中详细说明,如果不直接跳到 Q。
我正在考虑制作快速记录器,但是当程序崩溃时不受影响的记录器(也就是一些最后的日志消息没有丢失)。所以我的想法是写入共享内存(环形缓冲区)并从中读取另一个低优先级进程并进行转储。但是为了让它工作,我需要知道如果一个进程退出(正常退出,SEGFAULT),共享内存会发生什么......
所以我的问题是:当其中一个 procs 死亡时,共享内存(在 Linux 中,但你也可以 A for Win)会发生什么?是UB吗?
如果你对动机感兴趣,我会在接下来的几句话中详细说明,如果不直接跳到 Q。
我正在考虑制作快速记录器,但是当程序崩溃时不受影响的记录器(也就是一些最后的日志消息没有丢失)。所以我的想法是写入共享内存(环形缓冲区)并从中读取另一个低优先级进程并进行转储。但是为了让它工作,我需要知道如果一个进程退出(正常退出,SEGFAULT),共享内存会发生什么......
所以我的问题是:当其中一个 procs 死亡时,共享内存(在 Linux 中,但你也可以 A for Win)会发生什么?是UB吗?
当其中一个 proc 死机时,共享内存(在 Linux 中,但您也可以 A for Win)会发生什么情况?
没有。当一个进程死亡时,共享内存保持原样。它被映射为目录下的/dev/shm/
文件。当系统重新启动时,或者当所有进程取消映射共享内存文件并shm_unlink()
调用它时,它会被删除。
是UB吗?
不,它定义得很好。请参阅shm_overview(7) 的手册页:
POSIX 共享内存对象具有内核持久性:共享内存对象将一直存在,直到系统关闭,或者直到所有进程都取消映射该对象并使用 shm_unlink(3) 将其删除
Read boost IPC mechanisms, they explain persistence concept about shared memory.