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

ps如何显示Mac OS X上所有进程的argv?,c,macos,argv,ps,C,Macos,Argv,Ps,我试图根据某个进程的参数来确定它在Mac OS X上运行的时间。可能有几个进程使用相同的名称运行,但只有一个进程具有我要查找的参数。这些进程不属于运行我的代码的同一用户。他们不会以任何方式修改他们的argv “ps”命令准确显示了我需要的信息。但我非常希望不必生成“ps”并解析其输出 我最初使用sysctl尝试了来自的解决方案,但结果证明它只适用于您自己的进程;有关更多信息,请参阅 那么ps如何获取其他用户拥有的进程的argv信息呢?BSDps(在Mac OS X中使用)使用kvm_getarg

我试图根据某个进程的参数来确定它在Mac OS X上运行的时间。可能有几个进程使用相同的名称运行,但只有一个进程具有我要查找的参数。这些进程不属于运行我的代码的同一用户。他们不会以任何方式修改他们的argv

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

我最初使用sysctl尝试了来自的解决方案,但结果证明它只适用于您自己的进程;有关更多信息,请参阅

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

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

以下是实际调用:。搜索
kvm\u getproc2


有关此系列函数,请参阅。

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


最好的方法可能只是生成ps并解析输出,即使您真的不想这样做;)

苹果的版本就在这里:这很有趣,尽管libkvm从10.5开始就被弃用了(并且没有标题)。根据Jason Coco的回答,它可能与sysctl具有相同的限制;我没有注意到。这至少解开了谜团;谢谢。另外,sysctl密钥KERN_PROCARGS2被列为“\uu APPLE\u API\u UNSTABLE”,因此,即使您可以使用sysctl,它也可能会因苹果公司的突发奇想而更改。