如何确保正在运行的进程是我期望的进程?

Gar*_*ary 6 linux bash shell pid process

背景:

我有一个linux [1]系统管理一系列第三方守护进程,其中交互仅限于shell [2] init脚本,即只有{start | restart | stop | status}可用.

问题:

进程可以假定先前运行的进程的PID,通过检查正在运行的进程的PID来检查进程的状态.

示例:

过程A使用PID 123运行,随后死亡,过程B使用PID 123进行初始化,状态命令以非真实(错误)"OK"响应.换句话说,我们只检查来自其PID的进程是否存在以验证进程是否正在运行,我们假设如果存在具有此PID的进程,则它是有问题的进程.

建议的解决方案:

  1. 使用PID查询进程,以确保命令/守护进程正在运行,因为PID是预期的.这个解决方案的问题是命令和PID都需要匹配; 因此,需要维护多位信息并保持同步,并且增加了错误/边缘条件的附加复杂性.
  2. 将PID文件的创建时间与进程的开始时间相关联,如果进程在PID文件创建时间的某个增量内,我们可以相当确定命令/守护进程是否按预期运行.

除了存在使用该PID运行的进程之外,是否有标准方法来批准进程/ PID文件的真实性?即我(作为系统)想要知道你(过程)是否正在运行,以及你是否是我认为你是谁(A而不是B).

假设我们选择实施上面提出的第二个解决方案,PID创建时间和过程开始时间之间的置信区间/增量是否合理?在这里,合理意味着类型1 /类型2错误之间可接受的折衷.

[1] CentOS/RHEL [2] Bash

Ben*_*ery 5

文件内容:

的/ proc/{PID}/CMDLINE

是用于启动进程的命令行.这就是你需要的吗?