如何将一个进程的函数注册到这个进程接触的共享内存?
how to register a function for a process to the shared memory touched by this process?
我想在多个进程之间共享信息,我知道如果所有进程都死了并且shm_unlink没有被调用,共享内存仍然存在。我必须手动取消映射并调用 shm_unlink.
但问题是,有时它可能抛出异常并且进程在未调用 shm_unlink 的情况下终止。所以我想也许我可以向进程注册一个函数,比如 on_exit。如果此进程意外终止,此共享内存仍将被释放。
那我可以这样做吗?
I know if all the processes die and the shm_unlink is not called, the shared memory will still be there.
没有。共享内存在每个进程的内存中space,就像普通的虚拟内存一样。当一个进程退出时,它所有的虚拟内存都会被销毁。当所有参与进程退出时,将没有共享内存。
如果您忘记 shm_unlink()
,唯一会保留的是 shm_open()
创建的文件名。通常它位于 /dev/shm
。但它只是一个空文件的名称。因此,如果您 运行 以常规方式编写程序,则无需担心。
我想在多个进程之间共享信息,我知道如果所有进程都死了并且shm_unlink没有被调用,共享内存仍然存在。我必须手动取消映射并调用 shm_unlink.
但问题是,有时它可能抛出异常并且进程在未调用 shm_unlink 的情况下终止。所以我想也许我可以向进程注册一个函数,比如 on_exit。如果此进程意外终止,此共享内存仍将被释放。
那我可以这样做吗?
I know if all the processes die and the shm_unlink is not called, the shared memory will still be there.
没有。共享内存在每个进程的内存中space,就像普通的虚拟内存一样。当一个进程退出时,它所有的虚拟内存都会被销毁。当所有参与进程退出时,将没有共享内存。
如果您忘记 shm_unlink()
,唯一会保留的是 shm_open()
创建的文件名。通常它位于 /dev/shm
。但它只是一个空文件的名称。因此,如果您 运行 以常规方式编写程序,则无需担心。