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

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

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

if [ $"(ps aux | grep curl)" ]; then echo is; else echo not; fi

结果:

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

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

我如何检查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

答案1

您可以使用pgrep curl,它仅在发现正在运行的进程时才返回进程 ID。例如:

[  -n "$(pgrep curl)" ] &&  echo "yes" || echo "no"

pgrep 文档

答案2

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

ps aux | grep '[c]url'

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

答案3

一种可能的方法是添加另一个grep来过滤grep流程
,而不是

ps aux | grep curl

做了

ps aux | grep curl | grep -v grep

相关内容