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
This commit is contained in:
Ton Voon 2003-01-31 18:40:40 +00:00
parent 7f323619ba
commit 89ec266178

View file

@ -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);
}
}