考虑输出中的以下几行"ps auxwww"
:
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
root 4262 0.0 0,1 76592 1104 s005 Ss 10:02am 0:00.03 login -pf yo
yo 4263 0.0 0,0 75964 956 s005 S 10:02am 0:00.03 -bash
我如何强迫附言将 COMMAND 列中的所有命令扩展为其完全限定路径名?我希望将 login 解析为 /usr/bin/login,将 Bash 解析为 /bin/bash。
有没有相当于进程在 Mac OS X 中?也就是说 - 是否有基于文件的机制可以轻松获取进程信息?
答案1
尝试一下这个:
ps ax-o pid,cmd
您可以根据需要重新格式化它(有关详细信息,请阅读手册页)。
最后,我认为 ps(甚至 cat /proc/*/cmdline)会报告命令的启动方式。因此,如果没有提供完整路径,它将仅显示为“command”,而不是“/path/to/command”。
答案2
答案3
这些引用/proc/<pid>/exe
是正确的,但ps
不能可靠地提供 exe 路径。此示例提供了某些用户的 PID 和二进制路径列表。请注意,这可能是 Linux 特有的,因为我没有 OSX 系统可以测试:
# pgrep -u USER | while read a; do echo -n "$a "; readlink /proc/$a/exe; done
2439 /usr/bin/gnome-keyring-daemon
2442 /usr/bin/mate-session
2470 /usr/bin/dbus-launch
2471 /usr/bin/dbus-daemon
2481 /usr/bin/ssh-agent
2510 /usr/libexec/dconf-service
2520 /usr/libexec/mate-settings-daemon
2528 /usr/bin/marco
2532 /usr/bin/mate-panel
2537 /usr/libexec/gvfsd
2542 /usr/libexec/gvfsd-fuse
2554 /usr/bin/pulseaudio
答案4
从中提取所有进程 ID 和完整路径/进程:
ls -l /proc/*/exe 2>/dev/null | awk '{print $8 " " $10}'