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

E23*_*235 2 shell ps

这是我的进程列表:

$ 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
Run Code Online (Sandbox Code Playgroud)

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

$ ps | grep 'dockerd'
  312 root      0:00 dockerd
  492 root      0:00 grep dockerd  
Run Code Online (Sandbox Code Playgroud)

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

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

Prv*_*dav 5

你应该使用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
Run Code Online (Sandbox Code Playgroud)

然而

pgrep gnome-terminal
2045
Run Code Online (Sandbox Code Playgroud)

目前 chome 没有运行,所以

ps aux | grep chrome
user    2212  0.0  0.0  12780   976 pts/0    S+   17:34   0:00 grep chrome
Run Code Online (Sandbox Code Playgroud)

pgrep chrome不会返回任何东西。

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

  • `pgrep` 匹配进程名称,除非你传递 `-f` 而 `ps aux` 显示进程参数列表。`pgrep` 执行扩展的正则表达式匹配,因此 `pgrep -f gnome-terminal` 仍会匹配运行 `grep gnome-terminal` 的进程。在这里,您需要`pgrep -fx /usr/lib/gnome-terminal/gnome-terminal-server` 仅匹配其完整参数列表为`/usr/lib/gnome-terminal/gnome-terminal-server` 的进程 (3认同)