如何在不检测 pgrep 本身的情况下对 bash 脚本进行 pgrep 操作?

如何在不检测 pgrep 本身的情况下对 bash 脚本进行 pgrep 操作?

我正在尝试编写一个 bash 脚本,一旦用户运行它,就会检查另一个进程是否正在运行并将其显示在屏幕上。

当然,该脚本有不同的用途,例如脚本圆满结束后发送电子邮件,或者使用不同的方式向用户发送消息。

该脚本的主要目的是检测运行了一定时间的僵尸进程并通知用户采取一些措施。

我正在尝试检查php脚本是否在命令行中运行,因此我尝试使用它来检查脚本是否正在运行:

检测器

#!/bin/bash
var=$(pgrep -fl my-php-program.php)
if [ -z "$var" ]
  echo "Not running"
else
  echo "Running!"
fi

该脚本运行正常,并显示了正在运行的进程的内容,之后我使用变量内容进行了一些其他if...else...fi验证$var以执行某些操作。

尽管如此,如果我使用以下命令不断运行该过程:

while true; do bash detector.sh; sleep 1; done;

该脚本自我检测,有时会显示一些积极的错误响应。

我曾尝试过以下方法解决该问题,但没有成功:

var=$(pgrep -fl my-php-program.php | grep -v php)

还有其他方法可以解决这个问题吗?

提前致谢。

PS:我不想用 PHP 解决这个问题。如果您能提供仅基于 bash 的解决方案的建议,我将不胜感激。

答案1

由于pgrep使用扩展正则表达式,因此您可以使用与自身不匹配的正则表达式,例如

pgrep '[m]y_php_program.php'

man pgrep

相关内容