0

在 linux 上,我可以/proc按照如何从 C 中通过 PID 在 Linux 中计算进程的 CPU 使用率中所述使用?获取进程及其子进程的 CPU 时间。

我将如何在 OS X 上执行此操作?

4

1 回答 1

1

您可以使用sysctl获取进程信息。所以,让我们假设你有一个进程的 pid: -

#include <sys/sysctl.h>

struct kinfo_proc *getProcessInfo(pid_t pid)
{
    struct kinfo_proc* list = NULL;

    int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid};
    size_t size = 0;

    sysctl(mib, sizeof(mib) / sizeof(*mib), NULL, &size, NULL, 0);

    list = (kinfo_proc*)malloc(size);
    sysctl(mib, sizeof(mib) / sizeof(*mib), list, &size, NULL, 0);

    return list;
}

记得检查从 sysctl 返回的错误。为了简洁起见,我将它们排除在外,并且不要忘记在完成后释放返回的结构。

返回的kinfo_proc结构包含一个结构extern_proc,您将看到它具有以下属性:-

struct extern_proc {
    union {
        struct {
            struct  proc *__p_forw; /* Doubly-linked run/sleep queue. */
            struct  proc *__p_back;
        } p_st1;
        struct timeval __p_starttime;   /* process start time */
    } p_un;

    ....
}

__p_starttime,就是你要找的。

于 2015-02-24T13:34:28.123 回答