2015-02-24 2 views

ответ

1

Информацию о процессе можно получить, используя sysctl. Итак, давайте предположим, что у вас есть идентификатор процесса для процесса: -

#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, является то, что вы ищете.

 Смежные вопросы

  • Нет связанных вопросов^_^