mirror of
https://github.com/monitoring-plugins/monitoring-plugins.git
synced 2026-04-22 14:46:57 -04:00
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:
parent
7f323619ba
commit
89ec266178
1 changed files with 15 additions and 5 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue