如果某个进程调用mmap(...,MAP_ANONYMOUS | MAP_SHARED,...)
并派生N个子进程,则这些进程中的任何一个(父级或后代)是否有可能一次性对所有进程的内存进行munmap()
编码,从而释放物理内存,或者这些进程中的每个进程都必须进行munmap ()个?
(我知道内存将在进程退出时取消映射,但子进程将不会退出)。
或者,是否有办法从另一个进程中对内存进行映射?我正在考虑像munmap(pid,...)
这样的电话。
还是有一种方法可以使用非匿名映射并在相关文件描述符上执行操作(例如关闭文件)来实现我正在寻找的东西?
我的进程对性能敏感,因此,当人们知道共享内存将不再被任何人使用时,我想避免执行大量IPC。
最佳答案
madvise(MADV_DONTFORK)
标记映射。 cat /proc/<PID>/maps
列出映射的内存gdb -p <PID>
(它将暂停目标进程的执行)call munmap(0x<address>, 0x<size>)
很明显,如果您的进程尝试访问未映射的内存,它将收到SIGSEGV。因此,您必须100%确定自己在做什么。
关于linux - Linux : munmap shared memory in on single call,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36836178/