diff --git a/plugins/check_procs.c b/plugins/check_procs.c
index 64e62dde772a81a049a7d79a90b0120561c4cdca..011661c189325717064f70b15d17f83437a86e54 100644 (file)
--- a/plugins/check_procs.c
+++ b/plugins/check_procs.c
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ $Id$
+
******************************************************************************/
const char *progname = "check_procs";
-
-
-\f
int
main (int argc, char **argv)
{
- char input_buffer[MAX_INPUT_BUFFER];
+ char *input_buffer;
+ char *input_line;
+ char *procprog;
int procuid = 0;
int procppid = 0;
int procrss = 0;
float procpcpu = 0;
char procstat[8];
- char procprog[MAX_INPUT_BUFFER];
char *procargs;
char *temp_string;
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
+ input_buffer = malloc (MAX_INPUT_BUFFER);
+ procprog = malloc (MAX_INPUT_BUFFER);
+
asprintf (&metric_name, "PROCS");
metric = METRIC_PROCS;
if (process_arguments (argc, argv) == ERROR)
- usage (_("Unable to parse command line\n"));
+ usage (_("check_procs: could not parse arguments\n"));
+
+ /* Set signal handling and alarm timeout */
+ if (signal (SIGALRM, popen_timeout_alarm_handler) == SIG_ERR) {
+ printf (_("Cannot catch SIGALRM"));
+ return STATE_UNKNOWN;
+ }
+ alarm (timeout_interval);
if (verbose >= 2)
printf (_("CMD: %s\n"), PS_COMMAND);
if (child_stderr == NULL)
printf (_("Could not open stderr for %s\n"), PS_COMMAND);
+ /* flush first line */
fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process);
+ while ( input_buffer[strlen(input_buffer)-1] != '\n' )
+ fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process);
while (fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process)) {
+ asprintf (&input_line, "%s", input_buffer);
+ while ( input_buffer[strlen(input_buffer)-1] != '\n' ) {
+ fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process);
+ asprintf (&input_line, "%s%s", input_line, input_buffer);
+ }
+
+ if (verbose >= 3)
+ printf ("%s", input_line);
+
strcpy (procprog, "");
asprintf (&procargs, "%s", "");
- cols = sscanf (input_buffer, PS_FORMAT, PS_VARLIST);
+ cols = sscanf (input_line, PS_FORMAT, PS_VARLIST);
/* Zombie processes do not give a procprog command */
if ( cols == (expected_cols - 1) && strstr(procstat, zombie) ) {
cols = expected_cols;
- /* Set some value for procargs for the strip command further below
- Seen to be a problem on some Solaris 7 and 8 systems */
- input_buffer[pos] = '\n';
- input_buffer[pos+1] = 0x0;
}
if ( cols >= expected_cols ) {
resultsum = 0;
- asprintf (&procargs, "%s", input_buffer + pos);
+ asprintf (&procargs, "%s", input_line + pos);
strip (procargs);
/* Some ps return full pathname for command. This removes path */
-
-
-\f
/* process command-line arguments */
int
process_arguments (int argc, char **argv)
switch (c) {
case '?': /* help */
+ printf (_("%s: Unknown argument: %s\n\n"), progname, optarg);
print_usage ();
exit (STATE_UNKNOWN);
case 'h': /* help */
exit (STATE_OK);
case 't': /* timeout period */
if (!is_integer (optarg))
- usage (_("Timeout Interval must be an integer!\n\n"));
+ usage2 (_("Timeout interval must be a positive integer"), optarg);
else
timeout_interval = atoi (optarg);
break;
pw = getpwuid ((uid_t) uid);
/* check to be sure user exists */
if (pw == NULL)
- usage2 (_("UID %d was not found\n"), uid);
+ usage2 (_("UID %s was not found\n"), optarg);
}
else {
pw = getpwnam (optarg);
-
int
validate_arguments ()
{
-
-
-\f
/* Check thresholds against value */
int
check_thresholds (int value)
-
-
-\f
void
print_help (void)
{
print_revision (progname, revision);
- printf (_("Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>"));
- printf (_(COPYRIGHT), copyright, email);
+ printf ("Copyright (c) 1999 Ethan Galstad <nagios@nagios.org>");
+ printf (COPYRIGHT, copyright, email);
printf(_("\
Checks all processes and generates WARNING or CRITICAL states if the specified\n\
PROCS - number of processes (default)\n\
VSZ - virtual memory size\n\
RSS - resident set memory size\n\
- CPU - percentage cpu\n\
+ CPU - percentage cpu\n"));
+
+ printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
+
+ printf(_("\
-v, --verbose\n\
Extra information. Up to 3 verbosity levels\n"));
printf (_(UT_SUPPORT));
}
+
+
void
print_usage (void)
{
printf ("\
Usage: %s -w <range> -c <range> [-m metric] [-s state] [-p ppid]\n\
[-u user] [-r rss] [-z vsz] [-P %%cpu] [-a argument-array]\n\
- [-C command] [-v]\n", progname);
+ [-C command] [-t timeout] [-v]\n", progname);
printf (_(UT_HLP_VRS), progname, progname);
}
+