summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 05e4271)
raw | patch | inline | side by side (parent: 05e4271)
author | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Tue, 27 May 2008 15:50:41 +0000 (17:50 +0200) | ||
committer | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Tue, 27 May 2008 15:50:41 +0000 (17:50 +0200) |
src/processes.c | patch | blob | history |
diff --git a/src/processes.c b/src/processes.c
index 9d48a8ad40dcd0ce4a019db16219aef8dd9f0652..6b90f760480af0dcbdd34ad1370bcc7f71871571 100644 (file)
--- a/src/processes.c
+++ b/src/processes.c
kvm_t *kd;
char errbuf[1024];
char cmdline[ARG_MAX];
+ char *cmdline_ptr;
struct kinfo_proc *procs; /* array of processes */
- char ** argv;
+ char **argv;
int count; /* returns number of processes */
int i, j;
ps_list_reset ();
/* Open the kvm interface, get a descriptor */
- if ((kd = kvm_open(NULL, NULL, NULL, 0, errbuf)) == NULL) {
- ERROR ("Cannot open kvm interface: %s", errbuf);
+ kd = kvm_open (NULL, NULL, NULL, 0, errbuf);
+ if (kd == NULL)
+ {
+ ERROR ("processes plugin: Cannot open kvm interface: %s",
+ errbuf);
return (0);
}
/* Get the list of processes. */
- if ((procs = kvm_getprocs(kd, KERN_PROC_ALL, 0, &count)) == NULL) {
- kvm_close(kd);
- ERROR ("Cannot get kvm processes list: %s", kvm_geterr(kd));
+ procs = kvm_getprocs(kd, KERN_PROC_ALL, 0, &count);
+ if (procs == NULL)
+ {
+ kvm_close (kd);
+ ERROR ("processes plugin: Cannot get kvm processes list: %s",
+ kvm_geterr(kd));
return (0);
}
/* Iterate through the processes in kinfo_proc */
- for (i=0; i < count; i++) {
+ for (i = 0; i < count; i++)
+ {
/* retrieve the arguments */
- *cmdline = '\0';
- argv = kvm_getargv(kd, (const struct kinfo_proc *) &(procs[i]), 0);
- if (argv) {
- j = 0;
- while (argv[j] && strlen(cmdline) <= ARG_MAX) {
- if (j)
- strncat(cmdline, " ", 1);
- strncat(cmdline, argv[j], strlen(argv[j]));
- j++;
+ cmdline[0] = 0;
+ cmdline_ptr = NULL;
+
+ argv = kvm_getargv (kd, (const struct kinfo_proc *) &(procs[i]), 0);
+ if (argv != NULL)
+ {
+ int status;
+ int argc;
+
+ argc = 0;
+ while (argv[argc] != NULL)
+ argc++;
+
+ status = strjoin (cmdline, sizeof (cmdline),
+ argv, argc, " ");
+
+ if (status < 0)
+ {
+ WARNING ("processes plugin: Command line did "
+ "not fit into buffer.");
+ }
+ else
+ {
+ cmdline_ptr = &cmdline[0];
}
- }
+ }
pse.id = procs[i].ki_pid;
pse.age = 0;
pse.vmem_majflt_counter = procs[i].ki_rusage.ru_majflt;
pse.cpu_user = 0;
- pse.cpu_user_counter = procs[i].ki_rusage.ru_utime.tv_sec*1000 + procs[i].ki_rusage.ru_utime.tv_usec;
+ pse.cpu_user_counter = procs[i].ki_rusage.ru_utime.tv_sec
+ * 1000
+ + procs[i].ki_rusage.ru_utime.tv_usec;
pse.cpu_system = 0;
- pse.cpu_system_counter = procs[i].ki_rusage.ru_stime.tv_sec*1000 + procs[i].ki_rusage.ru_stime.tv_usec;
+ pse.cpu_system_counter = procs[i].ki_rusage.ru_stime.tv_sec
+ * 1000
+ + procs[i].ki_rusage.ru_stime.tv_usec;
- switch (procs[i].ki_stat) {
+ switch (procs[i].ki_stat)
+ {
case SSTOP: stopped++; break;
case SSLEEP: sleeping++; break;
case SRUN: running++; break;
case SZOMB: zombies++; break;
}
- ps_list_add (procs[i].ki_comm, cmdline, &pse);
+ ps_list_add (procs[i].ki_comm, cmdline_ptr, &pse);
}
- if (kd) kvm_close(kd);
+ kvm_close(kd);
ps_submit_state ("running", running);
ps_submit_state ("sleeping", sleeping);
for (ps_ptr = list_head_g; ps_ptr != NULL; ps_ptr = ps_ptr->next)
ps_submit_proc_list (ps_ptr);
-
#endif /* HAVE_LIBKVM */
return (0);