【问题标题】:How to use pgrep with slash?如何使用带斜杠的 pgrep?
【发布时间】:2021-06-12 00:44:17
【问题描述】:

我想让以下 bash 代码工作:

#!/bin/bash

SERVICE="/usr/sbin/some_command"
if pgrep -x "$SERVICE" >/dev/null; then
  echo "$SERVICE is already running"
else
  $SERVICE some_arguments
fi

我认为斜线 / 会造成一些麻烦,但我仍然想保留它。

【问题讨论】:

  • 您使用的是什么操作系统?在某些情况下,它只会查看命令名称的前 15 个字符,因此如果 $SERVICE 比这更长,除非您使用 -f(并使用匹配命令 + 参数的模式),否则它将无法工作)。
  • @GordonDavisson,它是centos 7。

标签: bash process grep ps


【解决方案1】:

在 Linux 上,您需要使用-f 来匹配整个命令行,因为没有它pgrep 只会查看不包含/has maximum 15 characters进程名称

SERVICE="/usr/sbin/some_command"
if pgrep -f "$SERVICE" >/dev/null; then
  echo "$SERVICE is already running"
else
  $SERVICE some_arguments
fi

但请注意,命令行可能根本不包含完整路径,因为它可能是 exec a file with $0 being empty,因此在这种情况下您将无法获得所需的输出

来自man pgrep

  • -f, --full
    • 该模式通常只与进程名称匹配。当设置-f 时,将使用完整的命令行。

...

注意事项:

用于匹配的进程名称限制在 /proc/pid/stat 的输出中出现的 15 个字符。使用-f 选项匹配完整的命令行/proc/pid/cmdline

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多