上下文:
我有一个 linux[1] 系统,它管理一系列第三方守护进程,与这些守护进程的交互仅限于 shell[2] 初始化脚本,即只有 {start|restart|stop|status} 可用。
问题:
进程可以假定先前运行的进程的 PID,通过使用它的 PID 检查正在运行的进程的存在来检查进程的状态。
示例:
进程 A 使用 PID 123 运行,随后死亡,进程 B 使用 PID 123 进行初始化,并且状态命令以不真实的(错误的)“OK”响应。换句话说,我们只从它的 PID 中检查一个进程的存在以验证该进程是否正在运行,我们假设如果存在具有此 PID 的进程,它就是有问题的进程。
建议的解决方案:
- 使用 PID 询问进程,以确保命令/守护程序按预期运行。这个方案的问题是命令和PID都需要匹配;因此需要维护和保持多位信息同步,并增加错误/边缘条件的复杂性。
- 将 PID 文件的创建时间与进程的启动时间相关联,如果进程在 PID 文件创建时间的某个增量内,我们可以相当肯定命令/守护程序运行是预期的。
除了存在使用该 PID 运行的进程之外,是否有一种标准方法来批准进程/PID 文件的真实性?即我(作为系统)想知道您(进程)是否正在运行,以及您是否是我认为的您(A 而不是 B)。
假设我们选择实施上面提出的第二种解决方案,PID 创建时间和进程启动时间之间的置信区间/增量是多少是合理的?在这里,合理意味着类型 1 / 类型 2 错误之间可接受的折衷。
[1] CentOS/RHEL [2] 重击