要快速定位Mac上正在运行的图形界面应用程序,需用pgrep过滤含Contents/MacOS/或AppTranslocation路径的进程,或用ps+grep结合PPID和关键词排除后台服务,再辅以launchctl检查active的LaunchAgents。

当你想在Mac终端里快速定位所有正在运行的图形界面应用程序(比如微信、Chrome、VS Code),而不是混杂系统守护进程的全量列表时,需要过滤掉后台服务、系统进程和命令行工具,只保留真正有GUI窗口的用户级应用进程。
用pgrep精准匹配GUI应用程序进程
GUI应用在macOS中通常以Bundle ID(如com.tencent.xin)或可执行文件名(如WeChat、Google Chrome)注册,pgrep能直接按名称或标识符检索,比ps更干净。
打开“应用程序” → “实用工具” → “终端”,输入以下命令:
pgrep -f "AppTranslocation\|Contents/MacOS/" | xargs -I{} ps -p {} -o pid,comm,user,command=
这条命令会扫描所有进程的完整命令行,筛选出路径含Contents/MacOS/(标准App Bundle启动入口)或AppTranslocation(Gatekeeper隔离区启动路径)的进程,确保只抓取真正的GUI应用——【漏掉这个条件,就会混入大量shell脚本、launchd子进程等非GUI干扰项】。
如果只想看进程名和PID,简化为:pgrep -lf "Contents/MacOS/" | awk '{print $1,$2}'。
用ps + grep组合筛选用户级GUI进程
此方法适合需人工核对启动方式的场景,比如区分同一软件的多个实例(如两个独立的Chrome窗口 vs 一个Chrome带多个标签页)。
第一步:执行ps -axo pid,ppid,comm,user,command | grep -E "(Contents/MacOS/|AppTranslocation)"。
第二步:观察输出中的PPID列——若父进程PID对应的是launchd(PID通常为1)或loginwindow,基本可确认是用户主动启动的GUI应用;若PPID是cfprefsd或bird,则大概率是iCloud同步类后台代理,应排除。
第三步:用grep -v "Helper\|Service\|Agent"剔除常见辅助进程,例如Google Chrome Helper虽属Chrome生态,但本身无独立窗口,不属于“应用程序进程”范畴。
用launchctl列出已加载的用户级GUI服务
部分现代macOS应用(如Slack、Zoom)通过LaunchAgents机制注册为“随登录启动”的GUI服务,它们不总出现在ps列表里,但属于你明确安装并启用的应用程序。
① 进入当前用户的LaunchAgents目录:cd ~/Library/LaunchAgents。
② 列出所有plist文件:ls -1 *.plist。
③ 对每个plist提取Label字段:plutil -p com.slack.*.plist | grep Label(将com.slack.*.plist替换为实际文件名)。
④ 用launchctl list | grep "com\.slack"验证该服务当前是否处于active状态——【只有显示active的条目,才代表它此刻确实在运行】。


















