如何快速停止 UNIX 上的一堆进程。
我可以用ps
/ top
,kill
。
如果进程数量很大,我使用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}'
获取所有进程 IDxargs 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
希望对你有帮助,杀戮愉快。