=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/pkill/pkill.c,v retrieving revision 1.1 retrieving revision 1.2 diff -c -r1.1 -r1.2 *** src/usr.bin/pkill/pkill.c 2004/01/06 20:07:49 1.1 --- src/usr.bin/pkill/pkill.c 2004/01/07 02:17:31 1.2 *************** *** 1,4 **** ! /* $OpenBSD: pkill.c,v 1.1 2004/01/06 20:07:49 millert Exp $ */ /* $NetBSD: pkill.c,v 1.5 2002/10/27 11:49:34 kleink Exp $ */ /*- --- 1,4 ---- ! /* $OpenBSD: pkill.c,v 1.2 2004/01/07 02:17:31 millert Exp $ */ /* $NetBSD: pkill.c,v 1.5 2002/10/27 11:49:34 kleink Exp $ */ /*- *************** *** 38,44 **** */ #ifndef lint ! static const char rcsid[] = "$OpenBSD: pkill.c,v 1.1 2004/01/06 20:07:49 millert Exp $"; #endif /* !lint */ #include --- 38,44 ---- */ #ifndef lint ! static const char rcsid[] = "$OpenBSD: pkill.c,v 1.2 2004/01/07 02:17:31 millert Exp $"; #endif /* !lint */ #include *************** *** 83,89 **** SLIST_HEAD(listhead, list); ! struct kinfo_proc *plist; char *selected; char *delim = "\n"; int nproc; --- 83,89 ---- SLIST_HEAD(listhead, list); ! struct kinfo_proc2 *plist; char *selected; char *delim = "\n"; int nproc; *************** *** 107,114 **** int main(int, char **); void usage(void); ! void killact(struct kinfo_proc *); ! void grepact(struct kinfo_proc *); void makelist(struct listhead *, enum listtype, char *); extern char *__progname; --- 107,114 ---- int main(int, char **); void usage(void); ! void killact(struct kinfo_proc2 *); ! void grepact(struct kinfo_proc2 *); void makelist(struct listhead *, enum listtype, char *); extern char *__progname; *************** *** 118,129 **** { extern char *optarg; extern int optind; ! char buf[_POSIX2_LINE_MAX], *mstr, **pargv, *cp, *q; int i, j, ch, bestidx, rv, criteria; ! void (*action)(struct kinfo_proc *); ! struct kinfo_proc *kp; struct list *li; ! struct timeval besttime; regex_t reg; regmatch_t regmatch; --- 118,129 ---- { extern char *optarg; extern int optind; ! char buf[_POSIX2_LINE_MAX], *mstr, **pargv, *p, *q; int i, j, ch, bestidx, rv, criteria; ! void (*action)(struct kinfo_proc2 *); ! struct kinfo_proc2 *kp; struct list *li; ! u_int32_t bestsec, bestusec; regex_t reg; regmatch_t regmatch; *************** *** 132,151 **** pgrep = 1; } else { action = killact; ! cp = argv[1]; ! if (argc > 1 && *cp == '-') { ! cp++; ! i = (int)strtol(cp, &q, 10); if (*q == '\0') { signum = i; argv++; argc--; } else { ! if (strncasecmp(cp, "sig", 3) == 0) ! cp += 3; for (i = 1; i < NSIG; i++) ! if (strcasecmp(sys_signame[i], cp) == 0) break; if (i != NSIG) { signum = i; --- 132,151 ---- pgrep = 1; } else { action = killact; ! p = argv[1]; ! if (argc > 1 && p[0] == '-') { ! p++; ! i = (int)strtol(p, &q, 10); if (*q == '\0') { signum = i; argv++; argc--; } else { ! if (strncasecmp(p, "sig", 3) == 0) ! p += 3; for (i = 1; i < NSIG; i++) ! if (strcasecmp(sys_signame[i], p) == 0) break; if (i != NSIG) { signum = i; *************** *** 232,240 **** if (kd == NULL) errx(STATUS_ERROR, "kvm_openfiles(): %s", buf); ! plist = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nproc); if (plist == NULL) ! errx(STATUS_ERROR, "kvm_getprocs() failed"); /* * Allocate memory which will be used to keep track of the --- 232,240 ---- if (kd == NULL) errx(STATUS_ERROR, "kvm_openfiles(): %s", buf); ! plist = kvm_getproc2(kd, KERN_PROC_ALL, 0, sizeof(*plist), &nproc); if (plist == NULL) ! errx(STATUS_ERROR, "kvm_getproc2() failed"); /* * Allocate memory which will be used to keep track of the *************** *** 254,266 **** } for (i = 0, kp = plist; i < nproc; i++, kp++) { ! struct proc *p = &kp->kp_proc; ! ! if ((p->p_flag & P_SYSTEM) != 0 || p->p_pid == mypid) continue; if (matchargs) { ! if ((pargv = kvm_getargv(kd, kp, 0)) == NULL) continue; j = 0; --- 254,264 ---- } for (i = 0, kp = plist; i < nproc; i++, kp++) { ! if ((kp->p_flag & P_SYSTEM) != 0 || kp->p_pid == mypid) continue; if (matchargs) { ! if ((pargv = kvm_getargv2(kd, kp, 0)) == NULL) continue; j = 0; *************** *** 273,279 **** mstr = buf; } else ! mstr = p->p_comm; rv = regexec(®, mstr, 1, ®match, 0); if (rv == 0) { --- 271,277 ---- mstr = buf; } else ! mstr = kp->p_comm; rv = regexec(®, mstr, 1, ®match, 0); if (rv == 0) { *************** *** 293,306 **** } for (i = 0, kp = plist; i < nproc; i++, kp++) { ! struct eproc *ep = &kp->kp_eproc; ! struct proc *p = &kp->kp_proc; ! ! if ((p->p_flag & P_SYSTEM) != 0) continue; SLIST_FOREACH(li, &ruidlist, li_chain) ! if (ep->e_pcred.p_ruid == (uid_t)li->li_number) break; if (SLIST_FIRST(&ruidlist) != NULL && li == NULL) { selected[i] = 0; --- 291,301 ---- } for (i = 0, kp = plist; i < nproc; i++, kp++) { ! if ((kp->p_flag & P_SYSTEM) != 0) continue; SLIST_FOREACH(li, &ruidlist, li_chain) ! if (kp->p_ruid == (uid_t)li->li_number) break; if (SLIST_FIRST(&ruidlist) != NULL && li == NULL) { selected[i] = 0; *************** *** 308,314 **** } SLIST_FOREACH(li, &rgidlist, li_chain) ! if (ep->e_pcred.p_rgid == (gid_t)li->li_number) break; if (SLIST_FIRST(&rgidlist) != NULL && li == NULL) { selected[i] = 0; --- 303,309 ---- } SLIST_FOREACH(li, &rgidlist, li_chain) ! if (kp->p_rgid == (gid_t)li->li_number) break; if (SLIST_FIRST(&rgidlist) != NULL && li == NULL) { selected[i] = 0; *************** *** 316,322 **** } SLIST_FOREACH(li, &euidlist, li_chain) ! if (ep->e_ucred.cr_uid == (uid_t)li->li_number) break; if (SLIST_FIRST(&euidlist) != NULL && li == NULL) { selected[i] = 0; --- 311,317 ---- } SLIST_FOREACH(li, &euidlist, li_chain) ! if (kp->p_uid == (uid_t)li->li_number) break; if (SLIST_FIRST(&euidlist) != NULL && li == NULL) { selected[i] = 0; *************** *** 324,330 **** } SLIST_FOREACH(li, &ppidlist, li_chain) ! if (ep->e_ppid == (uid_t)li->li_number) break; if (SLIST_FIRST(&ppidlist) != NULL && li == NULL) { selected[i] = 0; --- 319,325 ---- } SLIST_FOREACH(li, &ppidlist, li_chain) ! if (kp->p_ppid == (uid_t)li->li_number) break; if (SLIST_FIRST(&ppidlist) != NULL && li == NULL) { selected[i] = 0; *************** *** 332,338 **** } SLIST_FOREACH(li, &pgrplist, li_chain) ! if (ep->e_pgid == (uid_t)li->li_number) break; if (SLIST_FIRST(&pgrplist) != NULL && li == NULL) { selected[i] = 0; --- 327,333 ---- } SLIST_FOREACH(li, &pgrplist, li_chain) ! if (kp->p__pgid == (uid_t)li->li_number) break; if (SLIST_FIRST(&pgrplist) != NULL && li == NULL) { selected[i] = 0; *************** *** 341,349 **** SLIST_FOREACH(li, &tdevlist, li_chain) { if (li->li_number == -1 && ! (p->p_flag & P_CONTROLT) == 0) break; ! if (ep->e_tdev == (uid_t)li->li_number) break; } if (SLIST_FIRST(&tdevlist) != NULL && li == NULL) { --- 336,344 ---- SLIST_FOREACH(li, &tdevlist, li_chain) { if (li->li_number == -1 && ! (kp->p_flag & P_CONTROLT) == 0) break; ! if (kp->p_tdev == (uid_t)li->li_number) break; } if (SLIST_FIRST(&tdevlist) != NULL && li == NULL) { *************** *** 351,382 **** continue; } - #if 0 /* XXX - where is session id in kernel? */ SLIST_FOREACH(li, &sidlist, li_chain) ! if (ep->p_sid == (uid_t)li->li_number) break; if (SLIST_FIRST(&sidlist) != NULL && li == NULL) { selected[i] = 0; continue; } - #endif if (argc == 0) selected[i] = 1; } if (newest) { ! timerclear(&besttime); bestidx = -1; for (i = 0, kp = plist; i < nproc; i++, kp++) { - struct timeval *tv = &kp->kp_eproc.e_pstats.p_start; - if (!selected[i]) continue; ! if (timercmp(tv, &besttime, >)) { ! besttime = *tv; bestidx = i; } } --- 346,377 ---- continue; } SLIST_FOREACH(li, &sidlist, li_chain) ! if (kp->p_sid == (uid_t)li->li_number) break; if (SLIST_FIRST(&sidlist) != NULL && li == NULL) { selected[i] = 0; continue; } if (argc == 0) selected[i] = 1; } if (newest) { ! bestsec = 0; ! bestusec = 0; bestidx = -1; for (i = 0, kp = plist; i < nproc; i++, kp++) { if (!selected[i]) continue; ! if (kp->p_ustart_sec > bestsec || ! (kp->p_ustart_sec == bestsec ! && kp->p_ustart_usec > bestusec)) { ! bestsec = kp->p_ustart_sec; ! bestusec = kp->p_ustart_usec; bestidx = i; } } *************** *** 390,398 **** * Take the appropriate action for each matched process, if any. */ for (i = 0, rv = 0, kp = plist; i < nproc; i++, kp++) { ! struct proc *p = &kp->kp_proc; ! ! if (p->p_pid == mypid) continue; if (selected[i]) { if (inverse) --- 385,391 ---- * Take the appropriate action for each matched process, if any. */ for (i = 0, rv = 0, kp = plist; i < nproc; i++, kp++) { ! if (kp->p_pid == mypid) continue; if (selected[i]) { if (inverse) *************** *** 400,406 **** } else if (!inverse) continue; ! if ((p->p_flag & P_SYSTEM) != 0) continue; rv = 1; --- 393,399 ---- } else if (!inverse) continue; ! if ((kp->p_flag & P_SYSTEM) != 0) continue; rv = 1; *************** *** 427,458 **** } void ! killact(struct kinfo_proc *kp) { ! if (kill(kp->kp_proc.p_pid, signum) == -1) ! err(STATUS_ERROR, "signalling pid %d", (int)kp->kp_proc.p_pid); } void ! grepact(struct kinfo_proc *kp) { char **argv; if (longfmt && matchargs) { ! if ((argv = kvm_getargv(kd, kp, 0)) == NULL) return; ! printf("%d ", (int)kp->kp_proc.p_pid); for (; *argv != NULL; argv++) { printf("%s", *argv); if (argv[1] != NULL) putchar(' '); } } else if (longfmt) ! printf("%d %s", (int)kp->kp_proc.p_pid, kp->kp_proc.p_comm); else ! printf("%d", (int)kp->kp_proc.p_pid); printf("%s", delim); } --- 420,451 ---- } void ! killact(struct kinfo_proc2 *kp) { ! if (kill(kp->p_pid, signum) == -1) ! err(STATUS_ERROR, "signalling pid %d", (int)kp->p_pid); } void ! grepact(struct kinfo_proc2 *kp) { char **argv; if (longfmt && matchargs) { ! if ((argv = kvm_getargv2(kd, kp, 0)) == NULL) return; ! printf("%d ", (int)kp->p_pid); for (; *argv != NULL; argv++) { printf("%s", *argv); if (argv[1] != NULL) putchar(' '); } } else if (longfmt) ! printf("%d %s", (int)kp->p_pid, kp->p_comm); else ! printf("%d", (int)kp->p_pid); printf("%s", delim); }