是否有一个 Unix 类型的命令可以终止所有具有特定名称的进程?

是否有一个 Unix 类型的命令可以终止所有具有特定名称的进程?

我为 Ruby on Rails 应用程序运行了一个名为“delayed_job”的脚本。其中一个选项是使用单独的监控程序来运行此程序。当主程序死机时,监控程序将生成一个新的。我还可以运行多个进程。每个进程都有自己关联的监控进程。

脚本提供了一种杀死主进程的方法,但没有杀死监视进程。我想杀死所有进程。

命令如下:

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 命令本身除外)?

答案1

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 是一个“恢复生成事件”。

答案2

除了上述 pkill 和 killall 答案之外,您还可以执行以下操作,假设您想终止进程“foo”

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

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

答案3

如果您正在运行 Linux 机器,killall 命令似乎就是您正在寻找的。

答案4

pkill并且killall是它的变体。

# pkill vim

# killall vim

两者在各自的手册页中都有扩展文档。

相关内容