2

The following command will display all the PID's running for vmstat1:

ps -ef | grep "vmstat 1" | awk '{ print $2 }'

My question is, how do I kill them all, if there's like 20 of them at once?

  • 4
    have you looked at pkill? – iruvar Dec 5 '12 at 1:18
  • Couldn't you use kill $(pidof vmstat) or pidof vmstat | xargs kill? – Kotte Dec 5 '12 at 10:06
  • @Kotte I don't seem to have the 'pidof' command, as I'm currently running this on a Solaris box. – I AM L Dec 6 '12 at 5:53
  • Can $ killall vmstat not do it for you? – Kevdog777 Apr 28 '16 at 10:58
4

If your command produces list of PIDs, then simply pipe it into:

xargs kill

Note that your command will match the grep command as well, so consider adding something like |grep -v grep before the original grep command.

| improve this answer | |
  • Another idiom to avoid having the grep itself in the list is to use "grep '[f]oo'" instead of "grep 'foo'". Can't type backquotes on this android keypad, annoyingly. – dubiousjim Dec 5 '12 at 1:48
4

Just use pkill. Though not a standard command, it is found in many Unices and is dedicated to this kind of tasks.

pkill -f 'vmstat 1'

Also note that your grep will match vmstat 1 but also vmstat 10 and grep vmstat 1 (so would that pkill above), and awk is a superset of grep. To be more robust, you could do instead:

ps -Ao pid,args | awk '$2 == "vmstat" && $3 == "1" {print $1}' | xargs kill

Or

pkill -xf 'vmstat 1'
| improve this answer | |
  • Just use pkill… if you have it! I AM L may not be running Linux. – Gilles 'SO- stop being evil' Dec 5 '12 at 23:11
  • @Gilles. pkill is not a Linux invention. I believe it originated in Solaris and it is also found at least in FreeBSD, NetBSD. But it's true it's not a standard command, I'll add the note. – Stéphane Chazelas Dec 5 '12 at 23:28
  • “The pkill and pgrep utilities first appeared in NetBSD 1.6. They are modelled after utilities of the same name that appeared in Sun Solaris 7. They made their first appearance in FreeBSD 5.3.” Also OpenBSD 3.5. Quickly made its way into Linux. Not de facto standard because it is missing from OSX. – Gilles 'SO- stop being evil' Dec 5 '12 at 23:41
  • pkill actually isn't a bad idea either, tried it and it worked like a charm. – I AM L Dec 6 '12 at 5:56
0

If you are already using awk, you can do

ps -ef | grep "vmstat 1" | awk '!/grep/{ print "kill " $2 }' | bash

It will output a list of kill commands, and as every one of the commands kills a single process, you will not run into potential argument list too long (though it's highly unlikely when going over running processes), and I added a pattern to avoid matching the grep process itself, as killing it may cut your list short.

| improve this answer | |
  • You can (and should) get rid of grep in this case: ps -ef | awk '/vmstat 1/ { print "kill " $2 }' | bash – otokan Dec 5 '12 at 19:42
  • The "!/grep/" gets rid of grep. – Didi Kohen Dec 6 '12 at 6:10
  • You don't have to use grep command at all in this case. – otokan Dec 6 '12 at 8:23
-1

As simple as:

$ kill -9 $(pgrep -f vmstat)
| improve this answer | |
  • Looks like the stackexchange formatter turned your backticks into code, making for a misleading answer. You might have intended: kill -9 $(pgrep -f vmstat) – Jeff Schaller Apr 28 '16 at 11:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.