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

标签 linux bash shell process pid

上下文:

我有一个管理一系列第三方守护进程的 linux[1] 系统,与这些守护进程的交互仅限于 shell[2] 初始化脚本,即只有 {start|restart|stop|status} 可用。

问题:

进程可以采用先前运行的进程的 PID,通过使用其 PID 检查正在运行的进程是否存在来检查进程的状态。

示例:

进程 A 使用 PID 123 运行,随后终止,进程 B 使用 PID 123 初始化,状态命令以不真实(错误的)“OK”响应。换句话说,我们仅通过 PID 检查进程是否存在以验证进程是否正在运行,我们假设如果存在具有此 PID 的进程,则它就是有问题的进程。

建议的解决方案:

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

除了使用该 PID 运行的进程之外,是否有标准方法来验证进程/PID 文件的真实性? IE。我(作为系统)想知道您(进程)是否正在运行,以及您是否是我认为的那个人(A 而不是 B)。

假设我们选择实现上面提出的第二种解决方案,那么 PID 创建时间和进程启动时间之间的置信区间/增量是多少才合理?在这里,合理意味着类型 1/类型 2 错误之间可以接受的折衷。

[1] CentOS/RHEL [2] bash

最佳答案

文件内容:

/proc/{PID}/cmdline

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

关于linux - 如何确保正在运行的进程是我期望正在运行的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12318445/

相关文章:

arrays - Bash格式化数组

linux - 通过终端输入/读取

bash - shell 中的 <<EOF 和 <<\EOF heredocs 有什么区别

linux - crontab 自定义 shell 执行 cron

linux - 删除 shell 脚本中的分支,以便它在 Cygwin 中运行良好

php - 通过 php 读取二进制文件并通过 shell 上的 exec 保存它

linux - 发出 "make"命令时发生错误

c - Linux C 写串口(Arduino)并等待应答

linux - 如何将参数传递给 erlang os :cmd()?

linux - 使用 Shell 脚本从长字符串中提取子字符串