有次在linux下部署jar包做定时任务,第二天登录发现机子卡了,研究了会儿,发现有一堆僵尸java进程(程序做的有bug),当时吓坏了,客户的服务器啊,一个一个删,差点儿崩溃,最后找到这个批量删除的方法,当时做了笔记,现在整理到csdn
运用ps, grep, cut 和 kill 一起操作:
ps -ef|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
这条命令简单说明:
1、管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。
2、“ps -ef” 是Linux里查看所有进程的命令。这时检索出的进程将作为下一条命令"grep LOCAL=NO"的输入。
3、“grep LOCAL=NO” 的输出结果是,所有含有关键字"LOCAL=NO"的进程。
4、“grep -v grep” 是在列出的进程中去除含有关键字"grep"的进程。
5、“cut -c 9-15” 是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
6、“xargs kill -9” 中的 xargs 命令是用来把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行该命令。"kill -9"会强行杀掉指定进程。
7、其它类似的情况,只需要修改"grep LOCAL=NO"中的关键字部分就可以了。
8、另一种方法,使用awk
ps x|grep gas|grep -v grep |awk '{print $1}'|xargs kill -9