如何通过精确的命令查找进程?

如何通过精确的命令查找进程?

这是我的进程列表:

$ ps
PID   USER     TIME  COMMAND
    1 root      0:00 bash -c cp -R /docker /var/lib; echo Loading...; wrapdocker
    7 root      0:00 bash --login
  312 root      0:00 dockerd
  321 root      0:00 containerd --config /var/run/docker/containerd/containerd.toml --log-level info
  488 root      0:00 ps

我想检查该进程是否dockerd正在运行。
当我运行:ps | grep dockerd它打印两个进程:

$ ps | grep 'dockerd'
  312 root      0:00 dockerd
  492 root      0:00 grep dockerd  

我需要通过特定的命令行来找到它,它是dockerd而不是grep dockerd

我需要它作为 shell 脚本的一部分来检查是否dockerd正在运行。

答案1

您应该使用pgrep process而不是ps aux | grep process.

就像,当前gnome-terminal正在运行,所以

ps aux | grep gnome-terminal
user    2045  0.9  0.9 459456 36084 ?        Ssl  17:33   0:00 
/usr/lib/gnome-terminal/gnome-terminal-server
user    2206  0.0  0.0  12780   996 pts/0    S+   17:33   0:00 grep 
gnome-terminal

然而

pgrep gnome-terminal
2045

目前 chome 没有运行,所以

ps aux | grep chrome
user    2212  0.0  0.0  12780   976 pts/0    S+   17:34   0:00 grep chrome

pgrep chrome不会返回任何内容。

在你的情况下,pgrep dockerd会起作用。

答案2

#!/bin/bash

ps -ef | grep -q "[d]ockerd"
if [ "$?" -eq "0" ]
then
      echo "dockerd is running"
else
      echo "dockerd is not running"
fi

相关内容