Command

是否有 Unix 類型的命令可以殺死具有特定名稱的所有程序?

  • October 20, 2011

我為 Ruby on Rails 應用程序執行了一個名為“delayed_job”的腳本。其中一個選項是使用單獨的監視器 proc 執行此 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

我想殺了他們所有人,或者至少是監視器。我怎樣才能殺死這些(grep 命令本身除外)?

http://www.tech-recipes.com/rx/742/kill-the-undesired-unix-processes-in-one-go/很好地描述了通用 unix 的常見答案:管道 ps 到 grep,然後是 awk,然後是 xargs。

正如另一張海報提到的那樣,請注意任何圍繞“killall”的油嘴滑舌的答案,因為它在 AIX 和 Solaris 上(至少)與在 Linux 上的用途完全不同。在 Solaris 上以 root 身份執行 killall 是“恢復生成事件”。

在上述 pkill 和 killall 答案之外,您可以執行以下操作,假設您要終止程序“foo”

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

grep [f]oo意味著 grep 不會匹配 grep 命令本身,因此它只會殺死名為“foo”的程序。

引用自:https://serverfault.com/questions/323405