2015-02-24 29 views

回答

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,是你在找什麼。

相關問題