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

时间:2010-04-02 20:13:16

标签: c macos argv ps

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

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

我最初使用sysctl从this question尝试了解决方案,但事实证明这只适用于您拥有的进程;有关详细信息,请参阅my other question

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

2 个答案:

答案 0 :(得分:5)

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

以下是实际通话:ps source code。搜索kvm_getproc2

有关此系列功能,请参阅OpenBSD man page

答案 1 :(得分:5)

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

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