[nagiosplug] check_procs: Ignore ENOENT when checking for ...

Nagios Plugin Development nagios-plugins at users.sourceforge.net
Sun Aug 18 13:10:19 CEST 2013


    Module: nagiosplug
    Branch: master
    Commit: d5677d9b42562b429218dd9436efd5f0e79d7929
    Author: Sebastian Schmidt <sschmidt at interhyp.de>
 Committer: Holger Weiss <holger at zedat.fu-berlin.de>
      Date: Sun Dec  9 14:31:23 2012 +0100
       URL: http://nagiosplug.git.sf.net/git/gitweb.cgi?p=nagiosplug/nagiosplug;a=commit;h=d5677d9

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.

---

 plugins/check_procs.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

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 at lists.sourceforge.net";
 #include "regex.h"
 
 #include <pwd.h>
+#include <errno.h>
 
 #ifdef HAVE_SYS_STAT_H
 #include <sys/stat.h>
@@ -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;





More information about the Commits mailing list