From 89ec266178a3303e5a2c82f02a4155a34fd04b3f Mon Sep 17 00:00:00 2001 From: Ton Voon Date: Fri, 31 Jan 2003 18:40:40 +0000 Subject: Fix for zombie processes on Solaris (Bug 677803 - Matthew Brown) git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@277 f882894a-f735-0410-b71e-b25c423dba1c diff --git a/plugins/check_procs.c b/plugins/check_procs.c index 05318b6..755ed86 100644 --- a/plugins/check_procs.c +++ b/plugins/check_procs.c @@ -77,6 +77,7 @@ char *prog = ""; char *args = ""; char *fmt = ""; char tmp[MAX_INPUT_BUFFER]; +const char *zombie = "Z"; int main (int argc, char **argv) @@ -93,6 +94,7 @@ main (int argc, char **argv) int found = 0; /* counter for number of lines returned in `ps` output */ int procs = 0; /* counter for number of processes meeting filter criteria */ int pos; /* number of spaces before 'args' in `ps` output */ + int cols; /* number of columns in ps output */ int result = STATE_UNKNOWN; @@ -115,14 +117,18 @@ main (int argc, char **argv) fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process); while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) { - if ( #ifdef USE_PS_VARS - sscanf (input_buffer, PS_FORMAT, PS_VARLIST) >= 4 + cols = sscanf (input_buffer, PS_FORMAT, PS_VARLIST); #else - sscanf (input_buffer, PS_FORMAT, procstat, &procuid, &procppid, &pos, - procprog) >= 4 + cols = sscanf (input_buffer, PS_FORMAT, procstat, &procuid, + &procppid, &pos, procprog); #endif - ) { + /* Zombie processes do not give a procprog command */ + if ( cols == 3 && strstr(procstat, zombie) ) { + strcpy(procprog, ""); + cols = 4; + } + if ( cols >= 4 ) { found++; resultsum = 0; asprintf (&procargs, "%s", input_buffer + pos); @@ -147,6 +153,10 @@ main (int argc, char **argv) #endif if (options == resultsum) procs++; + } + /* This should not happen */ + else if (verbose) { + printf("Not parseable: %s", input_buffer); } } -- cgit v0.10-9-g596f