ps如何在Mac OS X上显示所有进程的argv?

DNS*_*DNS 5 c macos ps argv

我试图在Mac OS X上根据其参数确定特定进程的运行时间.可能有几个进程使用相同的名称运行,但只有一个进程具有我正在寻找的参数.这些进程不归将运行我的代码的同一用户所有.他们不会以任何方式修改他们的argv.

'ps'命令准确显示了我需要的信息.但我非常希望不必生成'ps'并解析其输出.

我最初使用sysctl 尝试了这个问题的解决方案,但事实证明只适用于您拥有的进程; 请参阅我的其他问题了解更多信息.

那么ps如何获取其他用户拥有的进程的argv信息呢?

Var*_*der 5

BSD ps(在Mac OS X中使用)用于kvm_getargv()获取进程的命令行参数.

这是实际的调用:ps源代码.搜索kvm_getproc2.

有关此系列函数,请参见OpenBSD手册页.

  • Apple 的版本在这里:http://www.opensource.apple.com/source/adv_cmds/adv_cmds-138.1/ps/ (2认同)

Jas*_*oco 5

在Mac OS X上,ps是setuid 0,它是获取所有进程信息的方式.您必须以root身份运行才能获取该信息,因此您需要设置为setuid 0或使用sudo运行实用程序.

最好的方法可能就是生成ps并解析输出,即使你真的不想;)