考虑"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
问题1:如何强制ps将COMMAND列中的所有命令展开为完全限定的path名称? 我想login被parsing到/ usr / bin / login和bash到/ bin / bash。
问题2: MacOS X中是否有与procfs相当的function? 那就是 – 是否有基于文件的机制来轻松获取过程信息?
试试这个:
ps ax -o pid,cmd
您可以根据需要重新格式化它(详情请阅读手册页)。
最后,我认为ps(甚至cat / proc / * / cmdline)会按照启动的方式报告命令。 所以如果没有给出完整的path,它将显示为“命令”而不是“/ path / to / command”。
首先进程可以改变由ps报告的标题,所以它本身不是很可靠。 你可以使用'e'标志来尝试环境variables。
ps auxwwwe
在这些内应该是一个内置的'_'variables,如下所述。
对于每个作为shell子项运行的命令,sh都会将此variables设置为可执行文件的完整path名,并将此值通过环境传递给该subprocess。
对于BSD来说,这和Linux一样。 我相信这不能被用户覆盖。 然而,它的可用性可能取决于用户的shellselect,这是非常讨厌和YMMV。
OSX没有一个本地的procfs。 有一个基于FUSE的端口。 详情可以在这里find。 再次YMMV。
停止使用ps并使用cat / proc / pid / cmdline 。
您可以使用通配符,例如/ proc / * / cmdline。
从/ proc中提取所有进程ID和完整path:
ls -l /proc/*/exe 2>/dev/null | awk '{print $8 " " $10}'