如何快速停止unix上的一堆进程?

如何快速停止unix上的一堆进程?

如何快速停止 UNIX 上的一堆进程。

我可以用ps/ topkill

如果进程数量很大,我使用shell脚本。还有其他方法吗,只用一两个unix命令就可以做到这一点?

答案1

我的选择是pkill/pgrep

答案2

这是我使用的一个在线 bash 脚本:

ps auxwww | grep -v grep | grep -i $1 | awk '{print $2}' | xargs kill -9

我杀死名称包含第一个参数(不区分大小写)的所有进程。各部分的细分如下:

  • ps auxwww打印具有非常宽的“命令”字段的所有进程
  • grep -v grep是否有将自己排除在杀戮之外
  • grep -i $1匹配包含第一个参数的所有行
  • awk '{print $2}'获取所有进程 ID
  • xargs kill -9杀死所有选定的进程

答案3

Psdoom 确实是杀死进程的唯一方法。 http://psdoom.sourceforge.net/

答案4

我真的更喜欢使用 pgrep/pkill 命令,这里是一个例子:

[root@testrhel7 ~]# pgrep -l http
2967 httpd
2968 httpd
2969 httpd
2970 httpd
2971 httpd
2972 httpd
[root@testrhel7 ~]#
[root@testrhel7 ~]# pkill -e http
httpd killed (pid 2967)
httpd killed (pid 2968)
httpd killed (pid 2969)
httpd killed (pid 2970)
httpd killed (pid 2971)
httpd killed (pid 2972)
[root@testrhel7 ~]#

当然你可以使用for循环:

[root@testrhel7 ~]# ps -ef  |grep http| grep -v grep
root       2989      1  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2990   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2991   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2992   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2993   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2994   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
[root@testrhel7 ~]#

[root@testrhel7 ~]# for i in $(ps -ef | awk '/http/ {print $2}'); do kill -9 $i; done 

希望对你有帮助,杀戮愉快。

相关内容