CentOS7.7中Shell脚本执行pgrep/ps命令多匹配PID问题及解决
CentOS 7.7 脚本执行进程查询返回多余PID的问题解决
问题现象
- 终端直接执行
pgrep -f 'process_name',仅返回目标进程PID 19737 - 将该命令写入Shell脚本执行时,返回两个PID:19737和10324
- 执行
ps -ef | grep -v grep | grep 'process_name' | awk '{print $2}'时,终端输出1个PID,脚本执行却得到3个PID
原因分析
脚本运行时,Shell会创建子进程执行查询命令,而pgrep -f会匹配整个命令行参数,grep也会匹配到脚本进程的命令行(因为脚本中包含了process_name关键词),因此会额外返回脚本自身或其子进程的PID。
解决方案
使用pgrep的-U参数指定目标进程所属的用户ID,精准过滤出该用户下的目标进程,避免匹配到脚本相关进程:
pgrep -U 'process_uid' -f 'process_name'
内容的提问来源于stack exchange,提问作者khm
相关产品推荐
相关产品推荐

