int sh_count_procs(char *procname) { struct proc *p; struct user *u; int total; if (kd == NULL) { return -1; } if (kvm_setproc(kd) < 0) { return (-1); } kvm_setproc(kd); total = 0; while ((p = kvm_nextproc(kd)) != NULL) { if (!p) { return (-1); } u = kvm_getu(kd, p); /* * Skip this entry if u or u->u_comm is a NULL pointer */ if (!u) { continue; } DEBUGMSGTL(("proc","misc1 Comparing wanted %s against %s\n", procname, u->u_comm)); if (strcmp(procname, u->u_comm) == 0) total++; } return (total); }
int sh_count_regexp_procs(char *procname, pcre *regexp) { struct proc *p; struct user *u; int total; if (kd == NULL) { return -1; } if (kvm_setproc(kd) < 0) { return (-1); } kvm_setproc(kd); total = 0; while ((p = kvm_nextproc(kd)) != NULL) { if (!p) { return (-1); } u = kvm_getu(kd, p); /* * Skip this entry if u or u->u_comm is a NULL pointer */ if (!u) { continue; } if (strcmp(procname, u->u_comm) == 0) total++; } return (total); }
struct proc * tst_nextproc(void) { struct proc *proc; struct pid pidbuf; printf("kvm_nextproc()\n"); if ((proc = kvm_nextproc(cookie)) == NULL) { printf("kvm_nextproc returned NULL\n"); return (proc); } /* * p_pid is now a macro which turns into a ptr dereference; * must do a kvm_read to get contents. */ if (kvm_read(cookie, (u_long)proc->p_pidp, (char *)&pidbuf, sizeof (struct pid)) != sizeof (struct pid)) { printf("ERROR: couldn't get pid\n"); } printf("p_pid: %d\n", pidbuf.pid_id); return (proc); }