Shell script to -9 kill based on name

97,022

Solution 1

You can use your shell to do this task for you:

kill -9 $(pidof middleman)

The shell executes the command pidof middleman first. The output of pidof(8) is the process id. So the shell substitutes the pidof-command with the process id and executes kill -9 18845 (or whatever the correct process id is).

Solution 2

There is an even simpler solution than the one of qbi: killall let's you kill processes by name, and you can specify signals.

killall -9 middleman

See man killall for more information and extra options (there are quite a few).

As the name suggests, this does send the signal to all processes named middleman. But that's not different from other ways (like pkill). Furthermore, pkill -9 middleman will target processes whose name match but do not equal middleman, such as middleman2, as well.

Solution 3

The other answers are entirely correct, but I might as well add a third option so all are documented here. You can also use:

pkill -9 middleman

See man pkill for more information and extra options.

It doesn't really matter which of these methods you use. They will all work. But knowing the options if useful if you want to modify the behaviour in some way, since the corresponding man pages show what other matching options are available.

Solution 4

pkill -9 -f middleman

The -f option makes it match the complete command line, rather than only the process name.

Note that -9 should be a last resort signal, not something to use routinely.

Solution 5

Just for fun, I'd like to add a more manual, old school way

kill -9 `ps aux | grep middleman | awk '{print $2}'`
Share:
97,022

Related videos on Youtube

mreq
Author by

mreq

Updated on September 18, 2022

Comments

  • mreq
    mreq over 1 year

    Is there a way (perhaps a script) how to automate this process:

    petr@sova:~$ ps -ef | grep middleman
    petr     18445  2312  1 12:06 pts/2    00:00:01 /home/petr/.rvm/gems/ruby-1.9.3-p362/bin/middleman                                                                  
    petr     18581 13621  0 12:08 pts/0    00:00:00 grep --color=auto middleman
    petr@sova:~$ kill -9 18445
    

    Unfortunately, pkill is too weak as I have to go with -9 option on kill.

    • OrangeDog
      OrangeDog over 11 years
      You can use -9 with pkill too...
    • Eliah Kagan
      Eliah Kagan over 11 years
      In my opinion, it's more elegant and proper to use -KILL than -9. What number corresponds to what signal is implementation-dependent. SIGKILL happens to be 9 on Linux i386 and Linux amd64, but not necessarily everywhere. (More info here.)
    • Andrea Corbellini
      Andrea Corbellini over 11 years
      @EliahKagan: while I like to use -KILL too (because it makes code more readable), it should be noted that SIGKILL = 9 is specified by POSIX, so -9 is pretty portable nowadays (and does not depend on kernels or architectures).
  • Andrea Corbellini
    Andrea Corbellini over 11 years
    killall for the win!
  • mreq
    mreq over 11 years
    Strange, doesn't work here. Nor does middleman*
  • Anish
    Anish over 11 years
    Ah. Looking more closely, it seems likely that you're wanting to kill a ruby interpreter, rather than a process really called middleman. This is where the differences in how exactly pkill, killall, pidof and grep match processes really start to matter!
  • slipset
    slipset over 11 years
    @gerhard, thanks for the edit, couldn't find the back ticks on my iPad. grep -v is a good idea...
  • Tobias Kienzler
    Tobias Kienzler over 11 years
    kill all middlemen? oh dear...
  • cwd
    cwd over 9 years
    thanks! I really like the ability to match the complete command line
  • Aaron Franke
    Aaron Franke over 7 years
    What's the difference between this and kill -9 $(pgrep middleman)?