Информацию о процессе можно получить, используя 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, является то, что вы ищете.