如何检查命令当前是否正在运行?

Sae*_*eed 4 linux bash grep ps

我想检查命令是否正在使用以下if子句运行,但它总是true,无论命令实际上是否正在运行:

if [ $"(ps aux | grep curl)" ]; then echo is; else echo not; fi
Run Code Online (Sandbox Code Playgroud)

结果:

[root@is ~]# if [ $"(ps aux | grep curl)" ]; then echo is; else echo not; fi
is
Run Code Online (Sandbox Code Playgroud)

ps外部的命令if

[root@is ~]# ps aux | grep curl
root      216564  0.0  0.2   6408  2064 pts/0    S+   22:22   0:00 grep --color=auto curl
Run Code Online (Sandbox Code Playgroud)

如何检查curl我的示例是否正在运行?

我尝试使用不同的参数ps,但我总是有grep命令(这在我看来是正常的),但我不知道如何检查它是否正在运行。

更新1

我想我可以做到这一点,但我不知道如何在命令中做到这一点:

if ps aux blah
  if it has only one line (I suppose somehow use `wc -l`
    then do something
  else do something else
  fi
fi
Run Code Online (Sandbox Code Playgroud)

Des*_*666 11

您可以只使用pgrep curl,它仅在找到正在运行的进程时才返回进程 ID。例子:

[  -n "$(pgrep curl)" ] &&  echo "yes" || echo "no"
Run Code Online (Sandbox Code Playgroud)

pgrep 文档


cho*_*oba 8

使用 grep 本身跳过该行的常见技巧是使用某种正则表达式:

ps aux | grep '[c]url'
Run Code Online (Sandbox Code Playgroud)

命令本身现在不包含字符串curl本身,因此它不会匹配。