![如何通过精确的命令查找进程?](https://linux22.com/image/150994/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%E7%B2%BE%E7%A1%AE%E7%9A%84%E5%91%BD%E4%BB%A4%E6%9F%A5%E6%89%BE%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
这是我的进程列表:
$ 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