如果您对动机感兴趣,我将在接下来的几句话中详细说明,如果不是,请跳至问题。
我正在考虑制作快速记录器,但当程序崩溃时不受影响(又名最后一些日志消息不会丢失)。所以我的想法是写入共享内存(ringbuffer)并让另一个低优先级进程从中读取并进行转储。
但为了实现这一点,我需要知道如果一个进程退出(正常退出,SEGFAULT),共享内存会发生什么......
所以我的问题是:
当其中一个进程死掉时,共享内存(在 Linux 中,但你也可以回答 Win)会发生什么?是UB吗?
当其中一个进程死掉时,共享内存(在 Linux 中,但也可以在 Win 中使用 A)会发生什么?
没有什么。当进程终止时,共享内存将保持原样。它被映射为下面的文件/dev/shm/
目录。当系统重新启动时,或者当所有进程取消映射共享内存文件和shm_unlink()
叫做。
是UB吗?
不,它有明确的定义。请参阅shm_overview(7) 的手册页 http://linux.die.net/man/7/shm_overview :
POSIX 共享内存对象具有内核持久性:共享内存对象将一直存在,直到系统关闭,或者直到所有进程都取消映射该对象并使用 shm_unlink(3) 删除它
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)