Hi I think that error message is misleading if you are running pkill as root.
How about instead of only printing if it did nothing, -l makes it always print "%d processes signalled"? On Sun, Jan 15, 2012 at 06:26:39PM +0000, Mark Lumsden wrote: > Some months ago there was an email about adding a 'i' option > to pgrep/pkill, one suggestion from that discussion was giving > pkill the ability to say if nothing had been killed. > > http://marc.info/?l=openbsd-tech&m=130789344027691&w=2 > > I must say, I liked this idea. But only got time recently > to have a look. Anyway FreeBSD has the code. Here it is > imported into OpenBSD's pgrep/pkill. The diff does > slightly more than just inform you of no kills, but I > like that aspect as well. > > Comments/oks? > > -lum > > Index: pkill.1 > =================================================================== > RCS file: /cvs/src/usr.bin/pkill/pkill.1,v > retrieving revision 1.16 > diff -u -p -r1.16 pkill.1 > --- pkill.1 29 Sep 2010 07:44:56 -0000 1.16 > +++ pkill.1 15 Jan 2012 18:03:00 -0000 > @@ -48,7 +48,7 @@ > .Op Ar pattern ... > .Nm pkill > .Op Fl Ar signal > -.Op Fl fnovx > +.Op Fl flnovx > .Op Fl G Ar gid > .Op Fl g Ar pgrp > .Op Fl P Ar ppid > @@ -100,9 +100,9 @@ process. > If used in conjunction with > .Fl f , > print the process ID and the full argument list for each matching process. > -This option can only be used with the > -.Nm pgrep > -command. > +For > +.Nm pkill , > +display the kill command used for each process killed. > .It Fl n > Match only the most recently created (newest) process, if any. > Cannot be used in conjunction with > Index: pkill.c > =================================================================== > RCS file: /cvs/src/usr.bin/pkill/pkill.c,v > retrieving revision 1.19 > diff -u -p -r1.19 pkill.c > --- pkill.c 10 Apr 2011 03:20:59 -0000 1.19 > +++ pkill.c 15 Jan 2012 18:03:00 -0000 > @@ -112,6 +112,7 @@ main(int argc, char **argv) > char buf[_POSIX2_LINE_MAX], *mstr, **pargv, *p, *q; > int i, j, ch, bestidx, rv, criteria; > int (*action)(struct kinfo_proc *, int); > + int did_action; > struct kinfo_proc *kp; > struct list *li; > u_int32_t bestsec, bestusec; > @@ -176,8 +177,6 @@ main(int argc, char **argv) > criteria = 1; > break; > case 'l': > - if (!pgrep) > - usage(); > longfmt = 1; > break; > case 'n': > @@ -392,11 +391,16 @@ main(int argc, char **argv) > /* > * Take the appropriate action for each matched process, if any. > */ > + did_action = 0; > rv = STATUS_NOMATCH; > for (i = 0, j = 0, kp = plist; i < nproc; i++, kp++) { > if ((kp->p_flag & P_SYSTEM) != 0 || kp->p_pid == mypid) > continue; > if (selected[i]) { > + if (longfmt && !pgrep) { > + did_action = 1; > + printf("kill -%d %d\n", signum, (int)kp->p_pid); > + } > if (inverse) > continue; > } else if (!inverse) > @@ -407,6 +411,9 @@ main(int argc, char **argv) > else if (rv != STATUS_ERROR) > rv = STATUS_MATCH; > } > + if (!did_action && !pgrep && longfmt) > + fprintf(stderr, > + "No matching processes belonging to you were found\n"); > if (pgrep && j) > putchar('\n'); > > @@ -421,7 +428,7 @@ usage(void) > if (pgrep) > ustr = "[-flnovx] [-d delim]"; > else > - ustr = "[-signal] [-fnovx]"; > + ustr = "[-signal] [-flnovx]"; > > fprintf(stderr, "usage: %s %s [-G gid] [-g pgrp] [-P ppid] [-s sid] " > "[-t tty]\n\t[-U uid] [-u euid] [pattern ...]\n", __progname, ustr);