要查清进程所属用户及真实启动路径,需结合ps aux确认USER字段和readlink -f /proc/<PID>/exe获取绝对路径,并用cat /proc/<PID>/cmdline解析原始命令;systemd服务则需通过systemctl cat查看ExecStart=。

要准确查清一个进程属于哪个用户、从哪启动,不能只看表面命令。关键得结合进程所有者身份和内核记录的真实路径两方面入手。
确认进程所属用户
最直接的方式是用 ps aux,输出中第一列 USER 就是启动该进程的用户。普通用户只能看到自己的进程;root 或加 sudo 才能查全系统:
- ps -u username:列出指定用户的全部进程(注意大小写,且普通用户无权查他人)
- ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu:自定义字段,带 CPU/内存排序,适合排查资源大户
- top -u username:实时监控该用户所有进程,按 U 键再输用户名也可动态筛选
获取真实启动路径
别信 ps 输出的 COMMAND 列或 which 命令——它们可能被篡改、截断,或只是解释器名(如 /bin/bash)。唯一可靠的是读取内核维护的符号链接:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 先用 pgrep -f 关键词 或 ps aux | grep 关键词 拿到 PID
- 再执行 readlink -f /proc/<PID>/exe:输出可执行文件的绝对路径(即使二进制已删,也会显示 xxx(deleted))
- 若返回 “No such file”,说明进程已退出或 PID 无效
补全启动上下文
光有 exe 不够,还得知道它在哪运行、带什么参数:
- readlink -f /proc/<PID>/cwd:当前工作目录,影响配置加载、相对路径行为
- cat /proc/<PID>/cmdline | tr '\0' ' ':原始启动命令(\0 分隔,必须用 tr 转义才可读)
- 如果 cmdline 第一个参数是脚本路径(如 /opt/app/start.sh),那它才是真正的“启动入口”,exe 可能只是 /bin/bash
特别注意 systemd 服务
如果是 systemctl start 启动的服务,/proc/<PID>/exe 通常只指向最终执行的二进制(比如 /usr/bin/nginx),真实启动逻辑藏在单元文件里:
- 用 systemctl status 服务名 查看 Loaded 行,找到 .service 文件位置
- 再运行 systemctl cat 服务名,重点看 ExecStart= 那一行

















