大家在日常的运维中,程序进程一般如何查找,我相信大部分人应该是使用ps -ef | grep java这个命令,这个输出冗余,还会自带grep本身的冗余结果,每次都要手动筛选,非常麻烦。今天给大家介绍一个大部分人不太熟悉的冷门命令pgrep,它简洁高效、专门用于进程检索,无需复杂管道、无需过滤冗余内容,一条命令精准筛选进程pid、进程名,是linux运维、脚本自动化的刚需命令。pgrep是linux系统内置的进程检索工具,全称process grep,专门用于根据进程名、用户、终端、父进程等条件,精准匹配运行中的进程并输出pid。•命令更简短:无需拼接管道,语法简洁,记忆成本极低•结果更纯净:自动过滤grep自身进程干扰,无冗余输出•适配脚本:输出结果规整,非常适合shell自动化运维简单来说:只想查进程pid、筛选进程状态,直接用pgrep,完胜ps grep。
我整理了运维工作中大部分场景都会用到的pgrep参数。
ps -ef |grep sshpgrep ssh
可以看出输出结果为纯pid列表,干净整洁,适合脚本读取。单纯看pid分不清进程,-l参数可同时输出pid和完整进程名,这个是日常使用最多的命令。如果你需要看到进程完整启动命令,包括路径、参数、配置文件等,使用 -a 参数:pgrep -a dockerpgrep -a sshd
默认情况下pgrep是模糊匹配,比如搜ssh,会把sshd也搜出来。精准匹配进程名用-x:pgrep sshprgep -x sshpgrep -x sshdpgrep -a -f sshd
这是我们日常维护排查脚本进程、Java 进程、后台任务必备参数。查找指定父进程的子进程,在排查进程关系时比较方便。#终止所有docker进程kill $(pgrep docker)#杀死所有包含某脚本的进程kill $(pgrep -f cesi.py)
#查看root用户的ssh进程详情pgrep -a -u root ssh
#检查docker是否运行,未运行则启动if [ -z "$(pgrep docker)" ]; then systemctl start docker fi #-z 代表shell测试表达式:判断字符串是否为空,为空则没有启动
#查找所有命令行含nslookup的进程pgrep -f nslookup
想简洁明了的查看pid用pgrep,看完整进程信息用ps。pgrep是linux进程管理的轻量化神器,一行命令搞定pid查询,参数简单、场景实用,不管是运维排查问题,还是开发编写脚本,都能大幅提升效率。下次如果遇到找进程pid,试试用pgrep,简洁又高效!如果觉得文章你对的运维工作有帮助,记得点赞加收藏。