summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 979b0fa)
raw | patch | inline | side by side (parent: 979b0fa)
author | Manuel Luis Sanmartín Rozada <manuel.luis@gmail.com> | |
Wed, 20 May 2015 17:15:37 +0000 (19:15 +0200) | ||
committer | Manuel Luis Sanmartín Rozada <manuel.luis@gmail.com> | |
Wed, 20 May 2015 17:15:37 +0000 (19:15 +0200) |
/proc/pid/status instead of counter the number of files in
/proc/pid/task/*.
/proc/pid/task/*.
src/processes.c | patch | blob | history |
diff --git a/src/processes.c b/src/processes.c
index 0649eab285770de13bfa61060ce3ee7eaa155b10..d65ffb66a5cd6f576e5da071c9ef96ecbed6dd10 100644 (file)
--- a/src/processes.c
+++ b/src/processes.c
return ((count >= 1) ? count : 1);
} /* int *ps_read_tasks */
-/* Read advanced virtual memory data from /proc/pid/status */
-static procstat_t *ps_read_vmem (int pid, procstat_t *ps)
+/* Read data from /proc/pid/status */
+static procstat_t *ps_read_status (int pid, procstat_t *ps)
{
FILE *fh;
char buffer[1024];
unsigned long long lib = 0;
unsigned long long exe = 0;
unsigned long long data = 0;
+ unsigned long long threads = 0;
char *fields[8];
int numfields;
long long tmp;
char *endptr;
- if (strncmp (buffer, "Vm", 2) != 0)
+ if (strncmp (buffer, "Vm", 2) != 0
+ || strncmp (buffer, "Threads", 7) != 0)
continue;
numfields = strsplit (buffer, fields,
{
exe = tmp;
}
+ else if (strncmp(buffer, "Threads", 7) == 0)
+ {
+ threads = tmp;
+ }
}
} /* while (fgets) */
ps->vmem_data = data * 1024;
ps->vmem_code = (exe + lib) * 1024;
+ ps->num_lwp = threads;
return (ps);
} /* procstat_t *ps_read_vmem */
}
else
{
- if ( (ps->num_lwp = ps_read_tasks (pid)) == -1 )
+ if ( (ps_read_status(pid, ps)) == NULL)
{
- /* returns -1 => kernel 2.4 */
- ps->num_lwp = 1;
+ /* No VMem data */
+ ps->vmem_data = -1;
+ ps->vmem_code = -1;
+ ps->num_lwp = 0;
+ DEBUG("ps_read_process: did not get vmem data for pid %i",pid);
+ }
+ if ( ps->num_lwp <= 0)
+ {
+ if ( (ps->num_lwp = ps_read_tasks (pid)) == -1 )
+ {
+ /* returns -1 => kernel 2.4 */
+ ps->num_lwp = 1;
+ }
}
ps->num_proc = 1;
}
cpu_system_counter = cpu_system_counter * 1000000 / CONFIG_HZ;
vmem_rss = vmem_rss * pagesize_g;
- if ( (ps_read_vmem(pid, ps)) == NULL)
- {
- /* No VMem data */
- ps->vmem_data = -1;
- ps->vmem_code = -1;
- DEBUG("ps_read_process: did not get vmem data for pid %i",pid);
- }
-
ps->cpu_user_counter = cpu_user_counter;
ps->cpu_system_counter = cpu_system_counter;
ps->vmem_size = (unsigned long) vmem_size;