linux - 检查特定路径下的程序是否正在运行

标签 linux bash process

我正在尝试使用以下代码检查进程是否正在运行:

SERVICE="./yowsup/yowsup-cli"
RESULT=`ps aux | grep $SERVICE`

if [ "${RESULT:-null}" = null ]; then
    echo "not running"
else
    echo "running"
fi

但是它一直在回显它正在运行,尽管它没有运行。我意识到 grep 本身就是结果,这就是问题所在。

如何跳过 grep 并只检查进程?

最佳答案

使用 pgrep :

if pgrep "$SERVICE" >/dev/null 2>&1 ; then
    echo "$SERVICE is running"
fi

或:

if pgrep -f "/path/to/$SERVICE" >/dev/null 2>&1 ; then
    echo "$SERVICE is running"
fi

注意:

  • pgrep将其参数解释为正则表达式。因此,包含正则表达式字符的路径可能无法匹配或产生误报(例如 pgrep -f /home/user/projects/c++/application/executable 由于 + 而无法按预期工作)。这个问题可以通过转义有问题的字符来解决(例如 pgrep -f /home/user/projects/c\+\+/application/executable )

  • pgrep -f <pattern>将指定模式与正在运行的进程的整个 命令行相匹配。因此,它将匹配显示为其他进程的参数的路径(例如,在一个终端中运行nano /usr/bin/sleep,在另一个终端中运行pgrep -f /usr/bin/sleep -> pgrep 报告nano 的pid,因为它包含 /usr/bin/sleep 作为其命令行中的参数)。为防止此类误报,请在模式前加上插入符号 ( ^ ) 以强制 pgrep仅匹配命令行的开头(例如 pgrep -f ^/usr/bin/sleep )

关于linux - 检查特定路径下的程序是否正在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29260576/

相关文章:

linux - 使用dd从特定位置开始写入数据

regex - 使用awk和regex搜索两行之间的文本

macos - 在 bash 中移动文件并自动重命名复制的文件而不覆盖现有文件的方法

ruby-on-rails - 什么是 process/reaper,为什么它不起作用?

android - 在 onCreateView 中显示 "Loading..."对话框

php 在 Linux 上太慢?

Linux bash shell 脚本对行进行排序

Linux Mint - 永久添加环境变量

java - 如何在不同的线程上运行程序的某些部分并将变量引用到线程?

linux - 如何设置虚拟磁盘的容量