阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何使用pgrep匹配

72次阅读
没有评论

共计 2511 个字符,预计需要花费 7 分钟才能阅读完成。

在 linux 中查看进程信息,经常要用到 pa auxf,具体到某个进程的时候,又需进行 grep 管道。如:ps auxf|grep java|grep -v grep,即然这么长,可以不可以简化呢?当然可以,如果还是使用 ps 命令的话,可以改为 ps auxf|grep jav[a],这样就不用排除自身了。不过感觉命令还是长了点,能不能再简点,可以,使用 pgrep java,不过此时得出的只是 pid。pgrep 命令相当于如下的命令:

ps -eo pid,cmd | awk '{print $1,$2}' | grep KeyWord
参数说明:
选项 说明
-d 定义多个进程之间的分隔符, 如果不定义则使用换行符。
-P 根据父进程 PID,找出所有字进程的 pid
-n 表示如果该程序有多个进程正在运行,则仅查找最新的,即最后启动的。
-o 表示如果该程序有多个进程正在运行,则仅查找最老的,即最先启动的(多个进程时即父进程 PID)。
-G 其后跟着一组 group id,该命令在搜索时,仅考虑 group 列表中的进程。
-u 其后跟着一组有效用户 ID(effetive user id),该命令在搜索时,仅考虑该 effective user 列表中的进程。
-U 其后跟着一组实际用户 ID(real user id),该命令在搜索时,仅考虑该 real user 列表中的进程。
-x 表示进程的名字必须完全匹配, 以上的选项均可以部分匹配。
-l 将不仅打印 pid, 也打印进程名。
-f 一般与 - l 合用, 将打印进程的参数。
使用示例
 默认只显示 PID
root@361way:~# pgrep zabbix
2380
2381
2382
2383
2384
2385
-l 同时显示 PID 和 ProcessName
root@361way:~# pgrep -l zabbix
2380 zabbix_agentd
2381 zabbix_agentd
2382 zabbix_agentd
2383 zabbix_agentd
2384 zabbix_agentd
2385 zabbix_agentd
-o 当匹配多个进程时,显示进程号最小的那个
root@361way:~# pgrep -l -o zabbix
2380 zabbix_agentd
-n 当匹配多个进程时,显示进程号最大的那个
root@361way:~# pgrep -l -n zabbix
2385 zabbix_agentd

这里需要特别指出的是 pgrep 默认只能匹配进程的前 15 个字符串,个体可以参看 ubuntu 问答上的说明,如下:

ps aux includes the full command line (path and parameters),
while pgrep only looks at the first 15 characters of the executable's names
特殊参数 <

使用 pgrep -f 可以进行进程全字符匹配,示例如下:

// 使用 ps 命令可以正常 grep 到进程
root@361way:~# ps auxf|grep druid
root 25713 0.0 0.0 8108 940 pts/0 S+ 06:08 0:00 _ grep --color=auto druid
dev 7438 1.3 11.5 5524888 884988 ? Sl Jun16 672:54 java -server -Xmx4g -XX:MaxNewSize=1g -XX:+UseCompressedOops -XX:+UseParNewGC -Duser.timezone=UTC -Dfile.encoding=UTF-8 -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCMSInitiatingOccupancyOnly -XX:+PrintHeapAtGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -Djava.io.tmpdir=/data/tmpdata/java.io.tmpdata -Xloggc:/data/tmpdata/java.io.tmpdata/coordinator-gc.log -classpath lib/*:config/coordinator io.druid.cli.Main server coordinator
//pgrep 的匹配结果为空
root@361way:~# pgrep druid
// 加上 - f 参数后,正常得到进程 pid
root@361way:~# pgrep -f druid
7438
root@361way:~# pgrep -f -l druid
7438 java -server -Xmx4g -XX:MaxNewSize=1g -XX:+UseCompressedOops -XX:+UseParNewGC -Duser.timezone=UTC -Dfile.encoding=UTF-8 -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCMSInitiatingOccupancyOnly -XX:+PrintHeapAtGC -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime -Djava.io.tmpdir=/data/tmpdata/java.io.tmpdata -Xloggc:/data/tmpdata/java.io.tmpdata/coordinator-gc.log -classpath lib/*:config/coordinator io.druid.cli.Main server coordinator

使用 -P 参数可以输出指定父进程的子进程,如:

root@361way:~# pgrep -P 2380
2381
2382
2383
2384
2385

相关命令 pkill,用法基本和 pgrep 一致。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2025-03-08发表,共计2511字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中