如何将进程的函数注册到此进程触及的共享内存?

时间:2018-02-02 14:07:03

标签: c linux shared-memory multiprocess

我想在多个进程之间共享信息,我知道如果所有进程都死掉并且没有调用shm_unlink,共享内存仍将存在。我必须手动取消映射并调用shm_unlink。

但问题是,有时它会抛出异常并且进程终止而不调用shm_unlink。所以我想也许我可以在进程中注册一个函数,比如on_exit。如果此过程意外终止,则此共享内存仍将被释放。

我可以这样做吗?

1 个答案:

答案 0 :(得分:2)

  

我知道如果所有进程都死掉并且没有调用shm_unlink,共享内存仍将存在。

没有。共享内存位于每个进程的内存空间中,就像普通的虚拟内存一样。进程退出时,其所有虚拟内存都将被销毁。当所有参与进程退出时,不会有共享内存。

如果您忘记shm_unlink()是由shm_open()创建的文件名,那么唯一的事情就会存在。通常它位于/dev/shm。但它只是一个空文件的名称。因此,如果您将以常规方式运行您的程序,您不必担心它。