pgrep -f 通过 shell glob 匹配完整命令行(/proc/[pid]/cmdline),非正则;易自匹配,可用 [p]ython 或 " python " 避免;精确定位需转义特殊字符、加用户限制或结合 -a/-n/-c 等选项。
pgrep -f
是定位带参数的进程最直接的方式,但它不是“正则搜索”,而是按 shell glob 规则匹配完整命令行(argv),用法稍有讲究,容易误匹配或漏匹配。
理解 -f 的实际行为
-f 会让 pgrep 去比对
/proc/[pid]/cmdline
中的完整启动命令(含路径和所有参数),但注意:
匹配模式仍走通配符逻辑(*、?、[a-z]),不是 grep -E 那类正则;例如
中的
实际被当作文本
和
处理,不是“任意字符”含义
空格是分隔符,不是通配符;想匹配带空格的参数,得把整个片段写全,比如
容易自匹配:运行
时,pgrep 自己的命令行里含
(如果从 Python 脚本调用),就会被列出来
避免自匹配的实用写法
常用技巧是“字符拆分”或加空格锚定,让 pgrep 进程自身不满足条件:
Docker Desktop(linux)
当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。
下载
用
替代
:shell 展开后是字面量
,但 pgrep 命令行里实际是
,不匹配
用空格包围关键词:
(前后带空格)——适用于参数中明确含独立单词的场景,如
组合 -x 不适用,因为 -x 只作用于进程名(comm 字段),和 -f 冲突,不能共用
精确定位带参数的服务进程
例如要找监听 8080 端口的 Java Web 应用,启动命令类似:
安全写法:
(点号加反斜杠防通配,* 表示中间可能有其他 JVM 参数)
更稳一点可加用户限制:
,缩小干扰范围
若需确认完整命令行,立刻接
:
,一眼看到实际参数
配合管理动作快速收尾
查到 PID 后常需 kill 或检查资源,建议链式使用:
只杀最新一个匹配进程:
统计数量用于判断是否存活:
与 lsof 联动查端口归属:
pgrep -f "python.*server.py".*.*"-c 'echo hello'"pgrep -f pythonpython[p]ythonpythonpython[p]ythonpgrep -f " python "/usr/bin/python3 /opt/app/main.pyjava -jar app.jar --server.port=8080pgrep -f "app\.jar.*--server\.port=8080"pgrep -u appuser -f "app.jar"-apgrep -a -f "app.jar"kill "$(pgrep -n -f 'redis-server --port 6380')"if [ $(pgrep -c -f 'nginx -c /etc/nginx-alt.conf') -eq 0 ]; then echo "配置 nginx 未运行"; filsof -i :3000 -a -p $(pgrep -f 'node server.js')