X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fprocesses.c;h=30798d42a6b76274608a6270c7481dddd3a17350;hb=66f9d645f883eee0aa408428eefdebdcc6dcfa7e;hp=15cb0aae84c636977fff57d53e679071527b07f6;hpb=343e02429cbfad4bd364d57e4317628636498444;p=collectd.git diff --git a/src/processes.c b/src/processes.c index 15cb0aae..30798d42 100644 --- a/src/processes.c +++ b/src/processes.c @@ -121,8 +121,6 @@ # define ARG_MAX 4096 #endif -#define BUFSIZE 256 - static const char *config_keys[] = { "Process", @@ -821,7 +819,7 @@ static procstat_t *ps_read_io (int pid, procstat_t *ps) if ((fh = fopen (filename, "r")) == NULL) return (NULL); - while (fgets (buffer, 1024, fh) != NULL) + while (fgets (buffer, sizeof (buffer), fh) != NULL) { derive_t *val = NULL; long long tmp; @@ -838,7 +836,8 @@ static procstat_t *ps_read_io (int pid, procstat_t *ps) else continue; - numfields = strsplit (buffer, fields, 8); + numfields = strsplit (buffer, fields, + STATIC_ARRAY_SIZE (fields)); if (numfields < 2) continue; @@ -890,7 +889,7 @@ int ps_read_process (int pid, procstat_t *ps, char *state) return (-1); buffer[i] = 0; - fields_len = strsplit (buffer, fields, 64); + fields_len = strsplit (buffer, fields, STATIC_ARRAY_SIZE (fields)); if (fields_len < 24) { DEBUG ("processes plugin: ps_read_process (pid = %i):" @@ -1000,13 +999,18 @@ static char *ps_get_cmdline (pid_t pid, char *name, char *buf, size_t buf_len) if ((pid < 1) || (NULL == buf) || (buf_len < 2)) return NULL; - ssnprintf (file, sizeof (file), "/proc/%u/cmdline", pid); + ssnprintf (file, sizeof (file), "/proc/%u/cmdline", + (unsigned int) pid); + errno = 0; fd = open (file, O_RDONLY); if (fd < 0) { char errbuf[4096]; - WARNING ("processes plugin: Failed to open `%s': %s.", file, - sstrerror (errno, errbuf, sizeof (errbuf))); + /* ENOENT means the process exited while we were handling it. + * Don't complain about this, it only fills the logs. */ + if (errno != ENOENT) + WARNING ("processes plugin: Failed to open `%s': %s.", file, + sstrerror (errno, errbuf, sizeof (errbuf))); return NULL; } @@ -1021,7 +1025,7 @@ static char *ps_get_cmdline (pid_t pid, char *name, char *buf, size_t buf_len) status = read (fd, (void *)buf_ptr, len); if (status < 0) { - char errbuf[4096]; + char errbuf[1024]; if ((EAGAIN == errno) || (EINTR == errno)) continue; @@ -1106,7 +1110,7 @@ static unsigned long read_fork_rate () errno = 0; endptr = NULL; - result = strtoul(fields[1], &endptr, 10); + result = strtoul(fields[1], &endptr, /* base = */ 10); if ((endptr == fields[1]) || (errno != 0)) { ERROR ("processes plugin: Cannot parse fork rate: %s", fields[1]); @@ -1798,6 +1802,11 @@ static int ps_read (void) pse.vmem_code = 0; pse.stack_size = 0; + pse.io_rchar = -1; + pse.io_wchar = -1; + pse.io_syscr = -1; + pse.io_syscw = -1; + ps_list_add (cmdline, cargs, &pse); } /* for (i = 0 .. nprocs) */