本文讲述 Linux pgrep
命令的基础知识。
pgrep
是一个命令行工具,它允许你基于给定条件来查找正在运行的程序的进程 ID。它可以是进程名字的全称或者一部分,进程运行者,或者其他属性。
这个pgrep
命令是procps
(或者procps-ng
)软件包的一部分,它基本上在所有的 Linux 发行版上都预装了。
pgrep
命令pgrep
的命令语法如下:
pgrep [OPTIONS] <PATTERN>
匹配<PATTERN>
可以指定为正则表达式。
当不带任何选项运行时,pgrep
显示匹配所给名字的所有运行程序 PID。例如,想要找到 SSH 服务器的 PID,你可以运行:
pgrep ssh
如果有进程名称匹配"ssh”,他们的 PID 将会被展示在屏幕上。如果没有发现匹配的,输出将是空的:
1039
2257
6850
31279
当至少有一个进程匹配了所给的名字时,这个命令返回0
.否则,返回退出错误码1
。这在 shell 脚本中很有用处。
如果你想发送信号给匹配的进程,使用pkill
。这个命令是pkill
的封装,并且使用了同样的选项和匹配样式。
pgrep
会在每一行打印一个匹配的进程。-d
选项允许你指定一个分隔符。例如,如果你想使用一个空格作为一个分隔符,输入:
pgrep ssh -d' '
输出:
1039 2257 6850 31279
-l
选项告诉pgrep
显示名称和 ID:
pgrep ssh -l
pgrep
使用正则表达式来执行搜索操作,并且将会列出所有名字包含ssh
的进程:
1039 sshd
2257 ssh-agent
6850 ssh
31279 ssh-agent
如果你想严格按照搜索样式准确匹配进程,你需要使用:
pgrep '^ssh$' -l
输出:
6850 ssh
默认情况下,pgrep
仅仅匹配进程名字。当使用-f
选项的时候,将会匹配所有的参数列表。
pgrep -f ssh
使用-u
选项告诉pgrep
显示由所给用户运行的进程:
pgrep -u root
想要指定多个用户,用逗号分隔他们的名字:
pgrep -u root,mark
想要显示最久(最老)和最近(最新)启动的进程,使用-n
(最新)和-o
(最久)选项。
例如,想要查找由用户mark
启动的最新进程,你将输入:
pgrep -lnu mark
正如你从上面例子所看到的,你将可以去掉空格,将参数合并,在前面加上一个-
。
想要反向匹配,例如,想显示不匹配所给条件的进程,使用-v
选项。下面的命令将会显示所有不是由用户mark
所运行的进程:
pgrep -v -u mark
这个-c
选项告诉pgrep
仅仅打印匹配进程的数目。例如,想要查找由"mark"用户所运行的进程,输入:
pgrep -c -u mark
pgrep
命令被用来查找基于不同条件的运行进程 PID。
想要获得更多关于pgrep
命令的信息,浏览pgrep 手册或者在你的终端输入man pgrep
。