From d5677d9b42562b429218dd9436efd5f0e79d7929 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Sun, 9 Dec 2012 14:31:23 +0100 Subject: check_procs: Ignore ENOENT when checking for myself Previously, when a process exited between the call to /bin/ps and stat("/proc/his/exe") was exiting it was not considered as possible instance of check_procs. This commit makes check_procs ignore all processes where /proc/pid/exe does not exist. diff --git a/plugins/check_procs.c b/plugins/check_procs.c index 6a30ce0..d6441f0 100644 --- a/plugins/check_procs.c +++ b/plugins/check_procs.c @@ -42,6 +42,7 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net"; #include "regex.h" #include +#include #ifdef HAVE_SYS_STAT_H #include @@ -157,6 +158,7 @@ main (int argc, char **argv) int crit = 0; /* number of processes in crit state */ int i = 0, j = 0; int result = STATE_UNKNOWN; + int ret; output chld_out, chld_err; setlocale (LC_ALL, ""); @@ -241,7 +243,8 @@ main (int argc, char **argv) /* Ignore self */ if ((usepid && mypid == procpid) || - (!usepid && stat_exe(procpid, &statbuf) != -1 && statbuf.st_dev == mydev && statbuf.st_ino == myino)) { + (!usepid && ((ret = stat_exe(procpid, &statbuf) != -1) && statbuf.st_dev == mydev && statbuf.st_ino == myino) || + (ret == -1 && errno == ENOENT))) { if (verbose >= 3) printf("not considering - is myself\n"); continue; -- cgit v0.10-9-g596f