在“ps auxwww”输出中获取可执行文件的完整路径

kno*_*orv 4 unix mac-osx process ps

考虑"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
Run Code Online (Sandbox Code Playgroud)

如何强制ps将 COMMAND 列中的所有命令扩展为其完全限定的路径名​​?我希望将登录解析为 /usr/bin/login 并将 Bash 解析为 /bin/bash。

是否有与Mac OS X 中的procfs等效的东西?也就是说 - 是否有基于文件的机制来轻松获取进程信息?

Dic*_*Bob 8

试试这个:

ps ax -o pid,cmd

您可以根据需要重新格式化(阅读手册页了解详细信息)。

最后,我认为 ps(甚至 cat /proc/*/cmdline)将按照启动的方式报告命令。因此,如果没有给出完整路径,它将仅显示为“command”而不是“/path/to/command”。

  • 关闭!在 OS X 和 FreeBSD(可能还有其他基于 BSD 的系统)上,它是“ps axwww -o pid,command”。 (6认同)

Dan*_*ley 6

首先,进程可以更改由 报告的标题ps,因此它本身不是很可靠。您可以使用“e”标志尝试环境变量。

ps auxwwwe
Run Code Online (Sandbox Code Playgroud)

其中应该是一个内置的“_”变量,如here所述。

对于作为 shell 子进程运行的每个命令,sh 将此变量设置为可执行文件的完整路径名,并将该值通过环境传递给该子进程。

这适用sh于 BSD 和 Linux。我相信这不能被用户覆盖。但是,它的可用性可能取决于用户对外壳的选择,它非常讨厌并且您的里程可能会有所不同。


OS X 没有本机 procfs。有一个基于FUSE的端口。可在此处找到详细信息。同样,您的里程可能会有所不同。