pgrep, pkill

基于名字及其属性检索进程或向进程发送信号


语法格式

pgrep [-flx] [-n|-o|-v] [-d delimiter] [-g pgrplist] [-G gidlist] [-P ppidlist]
[-s sidlist] [-t termlist] [-u euidlist] [-U uidlist] [pattern]
pkill [-signal] [-fx] [-n|-o|-v] [-g pgrplist] [-G gidlist] [-P ppidlist]
[-s sidlist] [-t termlist] [-u euidlist] [-U uidlist] [pattern]

命令简介

pgrep命令用于检索当前正在运行的进程,显示匹配选择准则的进程的PID。其中,pattern是一个扩展的正则表达式,用于匹配进程名或命令行。

在选择进程时,指定的匹配准则是逻辑与的关系,所有的准则都必须匹配。例如,“pgrep -u root sshd”命令表示仅选择名为sshd且归属超级用户root的进程,但“pgrep -u root,daemon”命令表示可以选择root或daemon拥有的进程。

利用pkill命令,可以向符合选择准则的进程发送指定的信号(默认的信号是SIGTERM)。

当前,进程名的匹配仅限于/proc/pid/stat文件提供的15个字符,但是,如果指定了“-f”选项,则可以匹配/proc/pid/cmdline文件提供的完整命令行。其中,pid是进程的PID。

注意,当使用pgrep或pkill命令检索进程时,两个命令都不会返回自己。

命令选项

-d delimiter  设置一个字符串,用于分隔输出的每个进程ID,默认值是换行符(pgrep)。

-f  通常,模式参数仅用于匹配进程名。当指定了“-f”选项时,可对整个命令行进行模式匹配检索。

-g pgrplist  仅选择匹配指定进程组ID的进程。进程组0是pgrep或pkill所在的进程组。

-G gidlist  选择仅匹配指定真实用户组ID的进程。其中gidlist可以是一个或多个用户组名或数字形式的用户组ID。

-l  列出进程名及进程ID(pgrep)。

-n  仅选择最新的(最近启动的)匹配进程。

-o  仅选择最老的(最早启动的)匹配进程。

-P ppidlist  仅选择匹配指定父进程ID的进程。其中ppidlist可以是一个或多个进程ID。

-s sidlist  仅选择匹配指定进程会话ID的进程。会话ID 0是pgrep或pkill自己的会话ID。

-t termlist  仅选择与指定控制终端匹配的进程。其中termlist可以是一个或多个终端设备文件名(省略“/dev/”前缀)。

-u euidlist  选择仅匹配指定有效用户ID的进程。其中euidlist可以是一个或多个用户名或数字形式的用户ID。

-U uidlist  选择仅匹配指定真实用户ID的进程。其中uidlist可以是一个或多个用户名或数字形式的用户ID。

-v  选择不匹配的进程。

-x  仅选择其名字或命令行(如果指定了“-f”选项)恰好匹配模式参数的进程。

-signal  定义发送给匹配进程的信号,数字形式或信号名均可(pkill命令使用)。

应用实例

1. 查询用户gqxing启动的bash进程的PID。

$ pgrep -u gqxing bash
2524
3078
3131
$

2. 在手工修改系统crontab文件之后,为使提交的后台作业立即生效,可以向crond守护进程发送SIGHUP信号,令其重读crontab文件。

# pkill -HUP crond
#

3. 给出所有bash进程的详细信息。

$ ps -fp $(pgrep -d' ' -x bash)
UID     PID     PPID  C STIME TTY      STAT   TIME CMD
gqxing  2524    2522  0 04:36 pts/0    Ss     0:00 bash
root    2775    2767  0 05:19 pts/0    S+     0:00 bash
gqxing  3078    3074  0 05:35 pts/1    Ss     0:00 -bash
gqxing  3131    2522  0 05:41 pts/2    Ss+    0:00 bash
$

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z