如何使用c以编程方式从osx中的pid获取uid?
发布时间:2020-12-16 10:19:28 所属栏目:百科 来源:网络整理
导读:给定一个pid,我想找到进程的所有者(作为uid).有没有办法在使用C的osx(或任何unix)中获得这个? 谷歌没有帮助. ‘ps’能够做到;所以我认为应该有一种方法来编程. 解决方法 来自Indhu的解决方案帮助了我,所以我想发布自己的. PID与纯C的UID: #include sys/sys
给定一个pid,我想找到进程的所有者(作为uid).有没有办法在使用C的osx(或任何unix)中获得这个?
谷歌没有帮助. ‘ps’能够做到;所以我认为应该有一种方法来编程. 解决方法
来自Indhu的解决方案帮助了我,所以我想发布自己的.
PID与纯C的UID: #include <sys/sysctl.h> uid_t uidFromPid(pid_t pid) { uid_t uid = -1; struct kinfo_proc process; size_t procBufferSize = sizeof(process); // Compose search path for sysctl. Here you can specify PID directly. const u_int pathLenth = 4; int path[pathLenth] = {CTL_KERN,KERN_PROC,KERN_PROC_PID,pid}; int sysctlResult = sysctl(path,pathLenth,&process,&procBufferSize,NULL,0); // If sysctl did not fail and process with PID available - take UID. if ((sysctlResult == 0) && (procBufferSize != 0)) { uid = process.kp_eproc.e_ucred.cr_uid; } return uid; } 没有多余的分配,没有循环. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |