当进程终止时共享内存区域会发生什么?

当进程终止时共享内存区域会发生什么?

我想知道使用创建的共享内存会发生什么,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

标记要销毁的段。该段实际上只有在最后一个进程将其分离后才会被销毁......调用者必须是该段的所有者或创建者,或者具有特权。

相关内容