Linux 下的 Pgrep 命令

2020-05-11 14:30:13 浏览数 (1)

本文讲述 Linux pgrep命令的基础知识。

pgrep是一个命令行工具,它允许你基于给定条件来查找正在运行的程序的进程 ID。它可以是进程名字的全称或者一部分,进程运行者,或者其他属性。

这个pgrep命令是procps(或者procps-ng)软件包的一部分,它基本上在所有的 Linux 发行版上都预装了。

一、如何使用pgrep命令

pgrep的命令语法如下:

代码语言:javascript复制
pgrep [OPTIONS] <PATTERN>

匹配<PATTERN>可以指定为正则表达式。

当不带任何选项运行时,pgrep显示匹配所给名字的所有运行程序 PID。例如,想要找到 SSH 服务器的 PID,你可以运行:

代码语言:javascript复制
pgrep ssh

如果有进程名称匹配"ssh”,他们的 PID 将会被展示在屏幕上。如果没有发现匹配的,输出将是空的:

代码语言:javascript复制
1039
2257
6850
31279

当至少有一个进程匹配了所给的名字时,这个命令返回0.否则,返回退出错误码1。这在 shell 脚本中很有用处。

如果你想发送信号给匹配的进程,使用pkill。这个命令是pkill的封装,并且使用了同样的选项和匹配样式。

pgrep会在每一行打印一个匹配的进程。-d选项允许你指定一个分隔符。例如,如果你想使用一个空格作为一个分隔符,输入:

代码语言:javascript复制
pgrep ssh -d' '

输出:

代码语言:javascript复制
1039 2257 6850 31279

-l选项告诉pgrep显示名称和 ID:

代码语言:javascript复制
pgrep ssh -l

pgrep使用正则表达式来执行搜索操作,并且将会列出所有名字包含ssh的进程:

代码语言:javascript复制
1039 sshd
2257 ssh-agent
6850 ssh
31279 ssh-agent

如果你想严格按照搜索样式准确匹配进程,你需要使用:

代码语言:javascript复制
pgrep '^ssh$' -l

输出:

代码语言:javascript复制
6850 ssh

默认情况下,pgrep仅仅匹配进程名字。当使用-f选项的时候,将会匹配所有的参数列表。

代码语言:javascript复制
pgrep -f ssh

使用-u选项告诉pgrep显示由所给用户运行的进程:

代码语言:javascript复制
pgrep -u root

想要指定多个用户,用逗号分隔他们的名字:

代码语言:javascript复制
pgrep -u root,mark

想要显示最久(最老)和最近(最新)启动的进程,使用-n(最新)和-o(最久)选项。

例如,想要查找由用户mark启动的最新进程,你将输入:

代码语言:javascript复制
pgrep -lnu mark

正如你从上面例子所看到的,你将可以去掉空格,将参数合并,在前面加上一个-

想要反向匹配,例如,想显示不匹配所给条件的进程,使用-v选项。下面的命令将会显示所有不是由用户mark所运行的进程:

代码语言:javascript复制
pgrep -v -u mark

这个-c选项告诉pgrep仅仅打印匹配进程的数目。例如,想要查找由"mark"用户所运行的进程,输入:

代码语言:javascript复制
pgrep -c -u mark

二、总结

pgrep命令被用来查找基于不同条件的运行进程 PID。

想要获得更多关于pgrep命令的信息,浏览pgrep 手册或者在你的终端输入man pgrep

0 人点赞