From 526c754c445147a0295807f4857d1fde258f9bb4 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Tue, 22 May 2007 17:53:23 +0200 Subject: [PATCH] processes plugin: ps_read_tasks will fail under Linux 2.4. Take this into account and don't report all processes without tasks as zombies. --- src/processes.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/processes.c b/src/processes.c index 68984458..ccf1571f 100644 --- a/src/processes.c +++ b/src/processes.c @@ -708,17 +708,21 @@ int ps_read_process (int pid, procstat_t *ps, char *state) ppid = atoi (fields[3]); - if ((tasks = ps_read_tasks (pid)) == NULL) - { - /* This happends for zombied, e.g. */ - DBG ("ps_read_tasks (%i) failed.", pid); - *state = 'Z'; - ps->num_lwp = 0; - ps->num_proc = 0; - } + *state = fields[2][0]; + + if (*state == 'Z') + { + ps->num_lwp = 0; + ps->num_proc = 0; + } + else if ((tasks = ps_read_tasks (pid)) == NULL) + { + /* Kernel 2.4 or so */ + ps->num_lwp = 1; + ps->num_proc = 1; + } else { - *state = '\0'; ps->num_lwp = 0; ps->num_proc = 1; for (i = 0; tasks[i] != 0; i++) @@ -728,10 +732,10 @@ int ps_read_process (int pid, procstat_t *ps, char *state) tasks = NULL; } - /* Leave the rest at zero if this is only an LWP */ + /* Leave the rest at zero if this is only a zombi */ if (ps->num_proc == 0) { - DBG ("This is only an LWP: pid = %i; name = %s;", + DBG ("This is only a zombi: pid = %i; name = %s;", pid, ps->name); return (0); } @@ -751,8 +755,6 @@ int ps_read_process (int pid, procstat_t *ps, char *state) ps->cpu_system_counter = (unsigned long) cpu_system_counter; ps->vmem_rss = (unsigned long) vmem_rss; - *state = fields[2][0]; - /* success */ return (0); } /* int ps_read_process (...) */ -- 2.11.0