有一个Unixtypes的命令来杀死所有具有特定名称的进程?

我为Ruby on Rails应用程序运行一个名为“delayed_job”的脚本。 其中一个选项是使用单独的监视器进程来运行此proc。 当主程序死亡时,显示器将产生一个新的。 我也可以运行多个进程。 每个将有其自己的相关监视过程。

该脚本提供了一种杀死主进程的方法,而不是监视进程。 我想杀了他们。

命令

ps -ef|grep delayed 

收益率:

 42011 29423 1 0 Sep25 ? 00:00:02 delayed_job.0_monitor 42011 29428 1 0 Sep25 ? 00:00:02 delayed_job.1_monitor 42011 29434 1 0 Sep25 ? 00:00:02 delayed_job.2_monitor 42011 29437 1 0 Sep25 ? 00:00:01 delayed_job.3_monitor 42011 23359 1 10 Oct19 ? 03:12:49 delayed_job.0 42011 8607 1 5 Oct19 ? 00:58:42 delayed_job.3 42011 21442 1 44 12:31 ? 01:02:03 delayed_job.2 42011 23092 1 4 14:18 ? 00:01:22 delayed_job.1 42011 23861 23763 0 14:51 pts/5 00:00:00 grep delayed 

我想杀死他们,或者至less是监视器。 我怎样才能杀死这些(除了grep命令本身)?

http://www.tech-recipes.com/rx/742/kill-the-undesired-unix-processes-in-one-go/对于通用的unix有一个很好的写法:pipe ps to grep,然后awk,然后到xargs。

作为另一个海报提到,要小心“killall”的任何glib的答案,因为它在AIX和Solaris(至less)有一个完全不同的目的比在Linux上。 在Solaris上以root身份运行killall是一个“简历生成事件”。

除了上面的pkill和killall的答案,你可以做以下的事情,假设你想杀死进程“foo”

 ps -ef | grep [f]oo | awk {'print $1'} | xargs kill 

grep [f]oo意味着grep将不会与grep命令本身匹配,所以它只会杀死名为“foo”的进程。

如果你正在运行一台linux机器,killall命令似乎是你正在寻找的。

pkillkillall是这个的变种。

 # pkill vim # killall vim 

两者都在其各自的手册中扩展了文档。