linux查看进程pgrep,查看进程PID专用工具-------pgrep

本文介绍了Linux命令pgrep的使用方法,包括如何通过程序名称查询进程、获取PID信息等。涵盖了pgrep的基本选项及其应用场景,帮助读者掌握进程管理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Linux命令pgrep简单介绍

pgrep是linux中常用的通过程序名称来查询进程的工具,一般是用来判断程序是否正在运行及查找正在运行进程的PID信息。通过pgrep命令,可以只指定进程的一部分名称从运行进程队列中进行查看进程的PID信息,但只输出PID号,不便于理解。可以结合‘-l’选项在显示PID的同时也显示这个进程的名称。

1、用法:

pgrep [options]

2、主要选项

-l,--list-name:列出进程名称和进程ID

-o,--oldest:仅显示最小(最早启动的进程)进程号

-n,--newest:仅显示最大(最新启动的进程)进程号

-u,--euid euid:仅列出有效用户相关的进程ID号

-U,- uid:仅匹配列出实际用户ID的进程

-P(大写),--parent ppid:仅列出父进程ID的子进程号

-x,--exact(精确):与进程中的命令名称精确匹配

-d,--delimiter(分隔符) :指定每个进程ID间的分隔符(默认为换行符)

-a,--list-full:列表显示进程的PID和进程所对应的程序以及运行时所带的参数。

-t,--terminal 【tty1】|【pts/0】:只显示指定控制终端下列出的进程ID。指定终端名称时没有“/ dev /”前缀。

不常用

-c:列出指定进程的个数。

-v,--inverse(反向):反向匹配。匹配所有的进程除了符合匹配条件的。这个选项通常用在pgrep的上下文中。

二、pgrep 命令常见用法

下面举几个例子验证各选项的用法,如下:

1、查看系统日志程序rsyslogd的PID信息

如果记不住系统日志程序的名称,可以只输入程序命令名称的一部分,pgrep命令可以根据指定进程的一部分名称从运行进程队列中进行查询,并将所有包含的指定部分的进程名称信息的PID都列出来。如下图:

3f9e7c04b18dd57135d822681d09c326.png

结合‘-l’选项显示PID的同时也显示这个进程的命令名称。

64a806ca358a621b56901be688a32bff.png

2、显示祖宗进程(Linux系统第一个启动的进程)的ID号和进程名

在Linux操作系统开机引导过程中,在内核加载完成后,内核会首先将第一个程序systemd加载到内存运行(在centos 6中是init),并由它完成一系列系统初始化的过程。所以,systemd进程对应的PID为1。

需要用到‘-o’ 选项,如下

e193b7bf82c5cd5e2d7f45938d48e56b.png

当某个服务是多进程的服务时,‘-o’选项后面也可以指定此服务名称来显示最小进程号,

例如:

显示远程服务sshd的最小进程号

617358fda64ce4d0c314e1759c14418e.png

3、显示最近(最大的)启动的进程的ID号和进程名

与‘-o’选项功能相反,‘-n’ 选项功能是查询最新启动的进程ID,用法如下

86c39a62e343ee1a0d00e162a1285e72.png

‘-n’选项后面也可以指定服务名称,来显示最大进程号。

例如:

显示远程服务ssh的最大进程号

71dbe769c24543c8e4b489ffeb4c36a3.png

4、根据用户名列出进程ID,可以使用‘-u’选项来查看

【1】列出所有跟tom用户有关的进程ID

483057e8959a5cedf6be4c1b0e920f89.png

【2】仅查看用户tom启动的top服务进程ID和名称

78745458a971efbf2aad762fb42c8904.png

也可以使用‘-U’选项查询有关tom用户的进程信息,用法跟‘-u’选项相同,不做过多介绍。

5、查询web服务进程下的子进程PID信息

5ff50d0ae331c1582d102355d3739e0d.png

如上图,一般来说某个服务的父进程的PID总是小于其子进程的PID,‘-P’选项后面跟父进程PID(不是进程名称),例如,如果不知道httpd服务父进程的PID怎么办?可以结合前面的‘-o’选项查询httpd服务的最小进程号。

6、精确查询系统日志服务进程名称PID信息,可以使用‘-x’选项

04f00a803b88ffef519cfd91f362ea59.png

看见了吧,需要输入完整的进程名称才能从cmd字段列表中进行匹配显示PID信息,是因为-x选项功能进行精确匹配输入的进程名称,而且同时只能查询一个程序ID,一般可以用在脚本里面。

7、分别以空格和分号输出Apache服务的进程ID号。

1233a65a73d2dc19f34ddf858519704f.png

上面几个示例都是纵向输出每个进程的ID号,即每个进程ID间的分隔符默认为换行符,若想横向显示需要‘-d’选项,并指定输出分割符,除了逗号外,使用其他分割符,需将分隔符放入引号内。

8、查询ping进程所对应的程序以及运行时所带的参数。

1c8ce62ddd24a95ab9c4303eb499449d.png

‘-a’选项功能匹配的是cmd字段,不仅可以显示执行命令的PID号,还可以完整的显示进程所对应的程序以及运行时所带的参数,而‘-l’仅显示进程的简称,‘-a’显示的字段内容要比使用‘-l’选项多一些。

9、查询第4个虚拟网络中端下的进程ID信息(从0开始),可以用‘-t’选项指定开启进程的终端

f4dcf252f46f4d21d6ce482f699d7e49.png

可以看到,在第4虚拟终端下,运行了两个进程,一个是提供了用户与内核进行交互操作的一种接口----命令解释器bash,另一个是正在执行yum安装程序的进程。若想了解其他用户在Linux上当前执行什么操作,通过-t选项可以查询指定中端下的子孙进程ID及执行命令。

以下两项例子做为了解即可

10、查看httpd服务启动的进程数量

a7fdd30933e9c2d88685b6ea75a71d0a.png

11、显示所有跟root用户无关的所有进程

[root@centos7 ~]# pgrep -avu root

a39b4f6e78c3085d8f769d58bdb32b45.png

综合使用:仅查询httpd进程的子进程详细信息(不包含父进程)

[root@centos7 ~]# ps -fp `pgrep -P $(pgrep -o httpd)`

956c3619cdee18fd4a18bcad4df8b707.png

以上是pgrep命令基本选项的使用,pgrep命令通常会和kill或pkill结合起来使用,由pgrep命令找出有问题的进程PID,由kill或pkill来杀掉有问题的进程是很容易的。

<think>好的,我现在需要帮助用户理解Linux中的命令`pgrep -fa "$GAME_NAME"`。首先,我应该回顾用户之前的问题,他们询问过`2>&1`,现在转向`pgrep`,可能是在学习进程管理相关的命令。用户可能是想通过这个命令查找与某个游戏名称相关的进程,可能是为了监控或者管理游戏进程,比如检查游戏是否在运行,或者终止它。 首先,我需要确认`pgrep`命令的基本功能。`pgrep`用于根据名称或其他属性查找进程ID。选项`-f`通常表示匹配整个命令行,而不仅仅是进程名。`-a`选项可能显示完整的命令行和进程ID。用户提到的`$GAME_NAME`是一个变量,实际使用时会被替换为具体的游戏名称。 接下来,我需要解析`pgrep -fa "$GAME_NAME"`的具体作用。`-f`选项会让`pgrep`检查整个命令行参数,而不仅仅是进程名。这对于那些通过脚本启动的进程很有用,因为进程名可能不是游戏名称,但命令行中包含游戏名称。`-a`选项会同时输出进程ID和完整的命令行,帮助用户确认找到的进程是否正确。`"$GAME_NAME"`需要用双引号包裹,避免变量中的空格导致参数错误。 然后,我应该考虑用户可能的使用场景。比如,用户可能运行了一个游戏,但不确定它是否在后台运行,或者想确认进程是否正常启动。此外,用户可能需要获取进程ID以便后续操作,比如用`pkill`终止进程。 需要注意的常见问题包括权限问题,如果用户没有足够的权限,可能无法查看所有进程。另外,变量`$GAME_NAME`是否正确设置,是否包含特殊字符需要转义。还要提醒用户注意`-f`选项的匹配范围,如果游戏名称是其他命令的一部分,可能会导致误匹配。 可能用户的实际例子是,用户有一个游戏名为“MyGame”,启动命令可能是`./mygame --option`,所以使用`pgrep -fa "MyGame"`可以找到该进程。如果用户想结束这个进程,可以结合`pkill`使用。 另外,用户可能混淆`pgrep`和`ps`、`grep`的组合,需要说明两者的区别,`pgrep`更简洁,直接输出进程ID,而`ps`加上`grep`更灵活但需要更多输入。 最后,需要总结命令的作用、选项的意义,以及常见使用场景和注意事项,确保用户全面理解如何正确使用这个命令,并避免常见错误。</think>在 Linux 中,`pgrep -fa "$GAME_NAME"` 是一个结合 **进程查找** 和 **全命令行匹配** 的实用命令,常用于精确检索与指定名称(如游戏进程)相关的进程信息。以下是详细解析: --- ### **1. 命令拆解** - **`pgrep`**: 专用于根据 **进程名称** 或 **命令行参数** 查找进程 ID(PID)。 - **选项 `-f`**: 匹配进程的 **完整命令行**(包括参数),而不仅是进程名称。 *示例*:若进程启动命令是 `/usr/bin/game --debug`,用 `-f` 可匹配 `game` 或 `debug`。 - **选项 `-a`**: 显示 **完整的命令行** 及 PID(默认只输出 PID)。 - **`"$GAME_NAME"`**: 变量形式的匹配字符串,需替换为具体值(如 `"minecraft"`)。 --- ### **2. 命令作用** ```bash pgrep -fa "$GAME_NAME" ``` - **功能**: 搜索所有命令行中包含 `$GAME_NAME` 字符串的进程,并返回其 **PID + 完整命令行**。 - **典型场景**: - 确认某个游戏进程是否正在运行。 - 调试因命令行参数启动的进程(如 `./game --port=8080`)。 --- ### **3. 使用示例** #### **示例 1:查找游戏进程** 假设游戏进程的启动命令为: ```bash /opt/my_game/launcher --mode=fullscreen ``` 执行命令: ```bash pgrep -fa "my_game" ``` 输出结果: ```bash 1234 /opt/my_game/launcher --mode=fullscreen ``` - **`1234`**:进程 PID - **后半部分**:完整的命令行内容。 --- #### **示例 2:结合变量使用** 在脚本中动态指定游戏名称: ```bash GAME_NAME="star_citizen" pgrep -fa "$GAME_NAME" ``` 若存在相关进程,输出类似: ```bash 5678 /home/user/games/star_citizen/run.sh ``` --- ### **4. 常见问题与注意事项** #### **(1) 匹配范围** - `-f` 会检查 **整个命令行**,包括参数和路径。 *示例*:若 `$GAME_NAME` 是 `game`,以下进程均会被匹配: ```bash /usr/bin/game # 进程名或路径含 "game" ./start_game.sh # 脚本名含 "game" python3 game_server.py # 参数含 "game" ``` #### **(2) 变量引号的重要性** - 变量 `"$GAME_NAME"` 必须用双引号包裹,避免含空格的名称被拆分。 *错误写法*:`pgrep -fa $GAME_NAME`(若变量含空格,会匹配多个片段)。 #### **(3) 权限限制** - 普通用户可能无法查看其他用户的进程(需 `sudo` 提权)。 --- ### **5. 扩展用法** #### **(1) 终止匹配的进程** 结合 `pkill` 直接终止进程: ```bash pkill -f "$GAME_NAME" # 结束所有匹配进程 ``` #### **(2) 反向匹配** 排除包含某关键词的进程: ```bash pgrep -fa -v "debug" # 查找不包含 "debug" 的进程 ``` #### **(3) 精确匹配** 限制匹配进程名(而非命令行): ```bash pgrep -a "$GAME_NAME" # 去掉 `-f`,仅匹配进程名 ``` --- ### **6. 与 `ps + grep` 对比** - **`pgrep` 优势**: - 直接输出 PID,适合脚本自动化操作。 - 语法简洁,无需手动过滤 `grep` 自身进程- **`ps + grep` 示例**: ```bash ps aux | grep "$GAME_NAME" | grep -v grep ``` --- ### **总结** `pgrep -fa "$GAME_NAME"` 是定位进程的强力工具,尤其适合通过 **命令行特征** 精确查找进程(如游戏、服务等)。理解 `-f` 和 `-a` 的作用后,可灵活应用于运维监控、脚本调试等场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值