我一直在使用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>
如果您有任何想法,我会非常感激!
答案 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
的方法。希望它有所帮助。