在共享内存系统中,当两个进程共享一个共享内存系统时,一个进程被终止后,共享内存系统如何通知其他正在运行的进程被杀死进程?
答案 0 :(得分:1)
共享内存,顾名思义,是一个内存,一个被动对象。您需要使用互斥锁来跟踪另一个应用程序的活动。每个应用程序都会创建自己的互斥锁,并等待另一个进程的互斥。如果应用程序终止,则互斥锁状态将变为Abandoned。
答案 1 :(得分:1)
一种方法是让父/控制进程将所有其他进程作为子进程启动。当任何一个孩子死亡时,父母将收到SIGCHLD
并且能够以理智的方式处理共享内存/资源的清理。
PostgreSQL遵循此设计模式及其postmaster和worker进程。
请注意,在大多数Unix系统上,在进程死亡期间,操作系统不会更改/解锁互斥锁。信号量提供UNDO功能,但它们肯定比互斥量重得多。 YMMV。