加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用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;
}

没有多余的分配,没有循环.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读