6

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

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

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

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

4

2 回答 2

5

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

这是实际调用:ps source code。搜索kvm_getproc2

请参阅OpenBSD 手册页了解这一系列函数。

于 2010-04-02T20:38:44.110 回答
5

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

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

于 2010-04-02T20:53:52.127 回答