gpt4 book ai didi

c - 获取外部进程的 CPU 时间,并在它仍在 OS X 上运行时获取它的子进程

转载 作者:太空宇宙 更新时间:2023-11-04 10:56:05 26 4
gpt4 key购买 nike

在 linux 上,我可以使用 /proc,如 How to calculate the CPU usage of a process by PID in Linux from C? 中所述获取进程及其子进程的 CPU 时间。

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

最佳答案

您可以使用 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,就是您要查找的内容。

关于c - 获取外部进程的 CPU 时间,并在它仍在 OS X 上运行时获取它的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28687004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com