MacOS - 如何使用C / C ++获取具有PID的进程用户/所有者?

时间:2017-06-08 20:31:51

标签: c++ c macos process kernel

我一直在使用proc_info.h和类似文件来获取有关我的进程的信息,例如路径,ppids,名称等。现在我需要使用C / C ++来获取拥有这些进程的用户。我怎样才能做到这一点?在proc_info.h我看到名为proc_regioninfo的结构,它有一个成员pri_user_tag,这可能就是我要找的但是我无法弄清楚如何填充````的结构proc_regioninfo```。我在网上到处看都找不到答案。

我一直在寻找文件系统的这一部分,试图找到东西:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-migrator/sdks/MacOSX.sdk/usr/include所以也许这会帮助你找到东西。

这个问题How to programatically get uid from pid in osx using c++?有一个答案,但我无法弄清楚如何按照此人的建议安装libproc-dev,我的系统也无法弄清楚如何处理#include <proc/readproc.h>。< / p>

如果您有任何想法,我会非常感激!

2 个答案:

答案 0 :(得分:1)

事实证明,你根本没有通过pid得到用户名。这是我的解决方案,在这种情况下它应该适用于其他任何人。

如果您有来自sysctl调用的PID,那么您已经拥有了kinfostructs,在这种情况下,您可以使用这些代码行来访问该结构中的信息:

#include <pwd.h>
#include <sysctl.h>

struct passwd *pwd = getpwuid(kinfostructs[i].kp_eproc.e_ucred.cr_uid);
printf("username: %s\n",pwd->pw_name);

我无法以他们(stackoverflow)发布的方式格式化实际的源代码。如果你想要我使用的实际源代码,请问我。

答案 1 :(得分:0)

如果您正在使用XCode(对于您在文件系统中的挖掘提示)以及是否可以选择编写混合的Objective-C / C ++应用程序,您可以使用Objective-C的NSProcessInfo - object,提供userName fullUserName之类的功能。 NSProcessInfo描述了如何使用jQuery的方法。希望它有所帮助。