代码之家  ›  专栏  ›  技术社区  ›  DNS

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

  •  5
  • DNS  · 技术社区  · 15 年前

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

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

    我最初是从 this question ,使用sysctl,但结果表明,它只适用于您拥有的进程;请参见 my other question 更多信息。

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

    2 回复  |  直到 15 年前
        1
  •  5
  •   Jason Coco superfell    15 年前

    在macosxps上是setuid 0,它是如何获取所有进程的信息的。必须以根用户身份运行才能获取该信息,因此要么需要设置为setuid 0,要么使用sudo运行实用程序。

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

        2
  •  5
  •   Variable Length Coder    15 年前

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

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

    OpenBSD man page 为这一系列的功能。