diff --git a/sysdeps/kernel/procstate.c b/sysdeps/kernel/procstate.c index f55d4839..1fb45866 100644 --- a/sysdeps/kernel/procstate.c +++ b/sysdeps/kernel/procstate.c @@ -28,7 +28,10 @@ static const unsigned long _glibtop_sysdeps_proc_state = (1 << GLIBTOP_PROC_STATE_UID) + (1 << GLIBTOP_PROC_STATE_GID) + -(1 << GLIBTOP_PROC_STATE_CMD); +(1 << GLIBTOP_PROC_STATE_RUID) + (1 << GLIBTOP_PROC_STATE_RGID) + +(1 << GLIBTOP_PROC_STATE_CMD) + (1 << GLIBTOP_PROC_STATE_STATE) + +(1 << GLIBTOP_PROC_STATE_HAS_CPU) + (1 << GLIBTOP_PROC_STATE_PROCESSOR) + +(1 << GLIBTOP_PROC_STATE_LAST_PROCESSOR); /* Init function. */ @@ -52,8 +55,28 @@ glibtop_get_proc_state_s (glibtop *server, glibtop_proc_state *buf, return; memcpy (buf->cmd, proc_state.comm, sizeof (buf->cmd)); - buf->uid = proc_state.uid; - buf->gid = proc_state.gid; + + if (proc_state.state & LIBGTOP_TASK_RUNNING) + buf->state |= GLIBTOP_PROCESS_RUNNING; + if (proc_state.state & LIBGTOP_TASK_INTERRUPTIBLE) + buf->state |= GLIBTOP_PROCESS_INTERRUPTIBLE; + if (proc_state.state & LIBGTOP_TASK_UNINTERRUPTIBLE) + buf->state |= GLIBTOP_PROCESS_UNINTERRUPTIBLE; + if (proc_state.state & LIBGTOP_TASK_ZOMBIE) + buf->state |= GLIBTOP_PROCESS_ZOMBIE; + if (proc_state.state & LIBGTOP_TASK_STOPPED) + buf->state |= GLIBTOP_PROCESS_STOPPED; + if (proc_state.state & LIBGTOP_TASK_SWAPPING) + buf->state |= GLIBTOP_PROCESS_SWAPPING; + + buf->uid = proc_state.euid; + buf->gid = proc_state.egid; + buf->ruid = proc_state.uid; + buf->rgid = proc_state.gid; + + buf->has_cpu = proc_state.has_cpu; + buf->processor = proc_state.processor; + buf->last_processor = proc_state.last_processor; buf->flags = _glibtop_sysdeps_proc_state; } diff --git a/sysdeps/kernel/procuid.c b/sysdeps/kernel/procuid.c index fb7360db..45f093a9 100644 --- a/sysdeps/kernel/procuid.c +++ b/sysdeps/kernel/procuid.c @@ -29,10 +29,17 @@ static const unsigned long _glibtop_sysdeps_proc_uid = (1 << GLIBTOP_PROC_UID_UID) + (1 << GLIBTOP_PROC_UID_EUID) + (1 << GLIBTOP_PROC_UID_GID) + (1 << GLIBTOP_PROC_UID_EGID) + +(1 << GLIBTOP_PROC_UID_SUID) + (1 << GLIBTOP_PROC_UID_SGID) + +(1 << GLIBTOP_PROC_UID_FSUID) + (1 << GLIBTOP_PROC_UID_FSGID) + (1 << GLIBTOP_PROC_UID_PID) + (1 << GLIBTOP_PROC_UID_PPID) + (1 << GLIBTOP_PROC_UID_PGRP) + (1 << GLIBTOP_PROC_UID_SESSION) + (1 << GLIBTOP_PROC_UID_TTY) + (1 << GLIBTOP_PROC_UID_TPGID) + -(1 << GLIBTOP_PROC_UID_PRIORITY) + (1 << GLIBTOP_PROC_UID_NICE); +(1 << GLIBTOP_PROC_UID_PRIORITY) + (1 << GLIBTOP_PROC_UID_NICE) + +(1 << GLIBTOP_PROC_UID_NGROUPS) + (1 << GLIBTOP_PROC_UID_GROUPS); + +#ifndef min +#define min(a,b) ((a < b) ? a : b) +#endif /* Init function. */ @@ -50,6 +57,7 @@ glibtop_get_proc_uid_s (glibtop *server, glibtop_proc_uid *buf, { libgtop_proc_state_t proc_state; long priority, nice; + int i; memset (buf, 0, sizeof (glibtop_proc_uid)); @@ -61,6 +69,11 @@ glibtop_get_proc_uid_s (glibtop *server, glibtop_proc_uid *buf, buf->gid = proc_state.gid; buf->egid = proc_state.egid; + buf->suid = proc_state.suid; + buf->sgid = proc_state.sgid; + buf->fsuid = proc_state.fsuid; + buf->fsgid = proc_state.fsgid; + buf->pid = proc_state.pid; buf->ppid = proc_state.ppid; buf->pgrp = proc_state.pgrp; @@ -79,5 +92,9 @@ glibtop_get_proc_uid_s (glibtop *server, glibtop_proc_uid *buf, buf->priority = priority; buf->nice = nice; + buf->ngroups = min (proc_state.ngroups, GLIBTOP_MAX_GROUPS); + for (i = 0; i < buf->ngroups; i++) + buf->groups [i] = proc_state.groups [i]; + buf->flags = _glibtop_sysdeps_proc_uid; } diff --git a/sysdeps/kernel/uptime.c b/sysdeps/kernel/uptime.c index 49a80c91..7fd64d23 100644 --- a/sysdeps/kernel/uptime.c +++ b/sysdeps/kernel/uptime.c @@ -27,7 +27,8 @@ #include static unsigned long _glibtop_sysdeps_uptime = -(1 << GLIBTOP_UPTIME_UPTIME) + (1 << GLIBTOP_UPTIME_IDLETIME); +(1 << GLIBTOP_UPTIME_UPTIME) + (1 << GLIBTOP_UPTIME_IDLETIME) + +(1 << GLIBTOP_UPTIME_BOOT_TIME); /* Init function. */ @@ -55,5 +56,7 @@ glibtop_get_uptime_s (glibtop *server, glibtop_uptime *buf) buf->uptime = (double) total / (double) stat.frequency; buf->idletime = (double) stat.cpu.idle / (double) stat.frequency; + buf->boot_time = stat.boot_time; + buf->flags = _glibtop_sysdeps_uptime; }