我想在多个进程之间共享信息,我知道如果所有进程都死掉并且没有调用shm_unlink,共享内存仍将存在。我必须手动取消映射并调用shm_unlink。
但问题是,有时它会抛出异常并且进程终止而不调用shm_unlink。所以我想也许我可以在进程中注册一个函数,比如on_exit。如果此过程意外终止,则此共享内存仍将被释放。
我可以这样做吗?
答案 0 :(得分:2)
我知道如果所有进程都死掉并且没有调用shm_unlink,共享内存仍将存在。
没有。共享内存位于每个进程的内存空间中,就像普通的虚拟内存一样。进程退出时,其所有虚拟内存都将被销毁。当所有参与进程退出时,不会有共享内存。
如果您忘记shm_unlink()
是由shm_open()
创建的文件名,那么唯一的事情就会存在。通常它位于/dev/shm
。但它只是一个空文件的名称。因此,如果您将以常规方式运行您的程序,您不必担心它。