On 10/22/13 02:09, Ted Unangst wrote:
I don't think the -l flag to pkill is useful. It's behavior is oddly different from pgrep -l (and more different with pgrep/pkill -f). Or rather, it's not just long output, but also turns on verbose mode when otherwise nothing would be printed. The only use case I can think of is "did I kill the right process?" which is literally the kind of shoot first, ask questions later behavior we should maybe not encourage.
I tend to pgrep -fl for a process to kill, and then I always have to think about which switch to remove. Being as tightly coupled as they are, I think allowing -l for both is helpful.
I agree the output is inconstistant, but I'd rather have that fixed (if possible) than it being removed.
$ sleep 50 & [1] 2673 $ pgrep -fl sleep 25664 sleep 5 2673 sleep 50 $ pgrep -fl 'sleep 50' 2673 sleep 50 $ pkill -l 'sleep 50' $ pgrep -fl 'sleep 50' 2673 sleep 50 $ #fuck $ pkill -f 'sleep 50' [1] + Terminated sleep 50
Related: linux pkill doesn't support -l either.
Indeed, which annoys me almost every day at work. ;-) /Alexander
Index: pkill.1 =================================================================== RCS file: /cvs/src/usr.bin/pkill/pkill.1,v retrieving revision 1.20 diff -u -p -r1.20 pkill.1 --- pkill.1 21 Aug 2012 09:45:50 -0000 1.20 +++ pkill.1 24 Sep 2013 02:17:59 -0000 @@ -49,7 +49,7 @@ .Op Ar pattern ... .Nm pkill .Op Fl Ar signal -.Op Fl flnoqvx +.Op Fl fnoqvx .Op Fl G Ar gid .Op Fl g Ar pgrp .Op Fl P Ar ppid @@ -101,9 +101,10 @@ Print the process name in addition to th process. If used in conjunction with .Fl f , -print the process ID and the full argument list for each matching process -.Pf ( Nm pgrep -only). +print the process ID and the full argument list for each matching process. +This option can only be used with the +.Nm pgrep +command. .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.31 diff -u -p -r1.31 pkill.c --- pkill.c 12 Dec 2012 22:25:21 -0000 1.31 +++ pkill.c 24 Sep 2013 02:16:37 -0000 @@ -184,6 +184,8 @@ main(int argc, char **argv) criteria = 1; break; case 'l': + if (!pgrep) + usage(); longfmt = 1; break; case 'n': @@ -446,7 +448,7 @@ usage(void) if (pgrep) ustr = "[-flnoqvx] [-d delim]"; else - ustr = "[-signal] [-flnoqvx]"; + ustr = "[-signal] [-fnoqvx]"; fprintf(stderr, "usage: %s %s [-G gid] [-g pgrp] [-P ppid] [-s sid]" "\n\t[-T rtable] [-t tty] [-U uid] [-u euid] [pattern ...]\n", @@ -458,9 +460,6 @@ usage(void) int killact(struct kinfo_proc *kp, int dummy) { - if (longfmt && !quiet) - printf("%d %s\n", (int)kp->p_pid, kp->p_comm); - if (kill(kp->p_pid, signum) == -1) { if (errno == ESRCH) return (STATUS_NOMATCH);