0
在Linux上,我可以使用/proc
How to calculate the CPU usage of a process by PID in Linux from C?中所述獲取進程和它的子進程的CPU時間。得到一個外部進程和它的孩子,而它仍然在OS X上運行的CPU時間
我該如何在OS X上執行此操作?
在Linux上,我可以使用/proc
How to calculate the CPU usage of a process by PID in Linux from C?中所述獲取進程和它的子進程的CPU時間。得到一個外部進程和它的孩子,而它仍然在OS X上運行的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,是你在找什麼。