Index: pkill.c =================================================================== RCS file: /cvs/src/usr.bin/pkill/pkill.c,v retrieving revision 1.6 diff -u -u -r1.6 pkill.c --- pkill.c 6 Jan 2005 22:37:46 -0000 1.6 +++ pkill.c 12 Feb 2005 07:18:04 -0000 @@ -109,8 +109,8 @@ struct listhead sidlist = SLIST_HEAD_INITIALIZER(list); void usage(void); -void killact(struct kinfo_proc *); -void grepact(struct kinfo_proc *); +void killact(struct kinfo_proc *, int); +void grepact(struct kinfo_proc *, int); int parse_pid(const char *, char **, struct list *, pid_t); void makelist(struct listhead *, enum listtype, char *); @@ -120,7 +120,7 @@ char buf[_POSIX2_LINE_MAX], *mstr, **pargv, *p, *q; int i, ch, bestidx, rv, criteria; unsigned int j; - void (*action)(struct kinfo_proc *); + void (*action)(struct kinfo_proc *, int); struct kinfo_proc *kp; struct list *li; struct timeval best; @@ -393,7 +393,7 @@ /* * Take the appropriate action for each matched process, if any. */ - for (i = 0, rv = 0, kp = plist; i < nproc; i++, kp++) { + for (i = 0, j = 0, rv = 0, kp = plist; i < nproc; i++, kp++) { if (kp->kp_proc.p_pid == mypid) continue; if (selected[i]) { @@ -406,9 +406,12 @@ continue; rv = 1; - (*action)(kp); + (*action)(kp, j++); } - + + if (pgrep) + putchar('\n'); + exit(rv ? STATUS_MATCH : STATUS_NOMATCH); } @@ -431,17 +434,22 @@ } void -killact(struct kinfo_proc *kp) +killact(struct kinfo_proc *kp, int dummy) { + dummy = 0; /* unused */ + 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) +grepact(struct kinfo_proc *kp, int printdelim) { char **argv; + if (printdelim) + fputs(delim, stdout); + if (longfmt && matchargs) { if ((argv = kvm_getargv(kd, kp, 0)) == NULL) return; @@ -457,7 +465,6 @@ else printf("%d", (int)kp->kp_proc.p_pid); - printf("%s", delim); } int