本文重点: 判断以前存在的shmem段是否仍然存在并正在使用?
这个测试的目的是检测这样一种情况:先前的postmaster崩溃了,但留下了仍然在运行的子后端。因此,我们只关心与预期DataDir相关的shmem段。这是一个重要的考虑因素,因为shmem段id的意外匹配相当常见。
判断之前的System V shared memory是否存在并被使用的功能是由函数PGSharedMemoryAttach()完成,不过PG源码不是直接调用该函数去进行检测,而是对该函数进行了一层封装,该函数是PGSharedMemoryIsInUse()。函数里面直接调用PGSharedMemoryAttach(),并根据其函数返回值以确定以前内存段是否存在?是否被使用。【true - 存在且被使用 false-未存在/未被使用】
其实现如下: