我想知道使用创建的共享内存会发生什么,shmget()
如图所示http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/shm/example-2.html当任何进程终止或死亡时?该区域是被释放还是会继续存在?
答案1
这取决于应用程序的作者是否知道如何处理该问题。
许多应用程序都是这样编写的:
shmctl(id, IPC_RMID, 0);
在他们停止使用共享内存段之后。
在这种情况下,当程序意外死亡(例如发生核心转储)后,该内存段将继续存在。
然而,如果程序shmctl(id, IPC_RMID, 0);
在附加内存段后直接调用,内核将为任何类型的程序终止执行所需的内务处理。
答案2
它将持续存在,必须明确删除shmctl IPC_RMID
标记要销毁的段。该段实际上只有在最后一个进程将其分离后才会被销毁......调用者必须是该段的所有者或创建者,或者具有特权。