如何使用C ++从OSX中的pid以编程方式获取uid?

Ind*_*thi 4 c++ unix macos process

给定一个pid,我想找到该进程的所有者(作为uid)。有没有办法使用C ++在osx(或任何unix)中得到它?

Google没有帮助。'ps'可以做到;所以我认为应该有一种以编程方式获取它的方法。

小智 5

Indhu的解决方案对我的帮助很大,所以我想发表自己的看法。

具有纯C的PID的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;
}
Run Code Online (Sandbox Code Playgroud)

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