繁体   English   中英

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

[英]MacOS - how to get process user/owner with PID using C/C++?

我一直在使用proc_info.h和类似的文件来获取有关我的进程的信息,例如路径,ppid,名称等。现在,我需要使用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所以也许可以帮助您找到东西。

这个问题如何使用C ++从osx的pid中以编程方式获取uid? 有一个答案,但是我无法弄清楚如何按照人们的建议安装libproc-dev ,我的系统也无法弄清楚如何使用#include <proc/readproc.h>

如果您有任何想法,我将不胜感激!

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

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

#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)允许我发布的方式格式化实际的源代码。 如果您想要我使用的实际源代码,请询问我。

如果您使用的是XCode(在文件系统中进行挖掘所暗示的内容),并且可以选择编写混合的Objective-C / C ++-应用程序,则可以使用Objective-C的NSProcessInfo ,该对象提供了诸如userName功能。的fullUserName 这样的SO回答中描述如何使用NSProcessInfo方法。 希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM