我为 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
两者在各自的手册页中都有扩展文档。